Skip to content

Latest commit

 

History

History
65 lines (52 loc) · 1.71 KB

rippleButton.md

File metadata and controls

65 lines (52 loc) · 1.71 KB
标题 标签
rippleButton(波纹按钮) click,button(点击,按钮)

实现一个波纹按钮。

  • 给按钮增加一个点击事件,获取当前事件对象的 x 坐标和 y 坐标,以及按钮的左间距和上间距,计算波纹散开的坐标值。
  • 创建一个 span 元素,添加一个类名用来设置波纹按钮的样式。
  • 将 span 元素的左偏移量和上偏移量设置成计算的坐标值,并添加到按钮元素中,延迟 1s 执行删除。

代码如下:

css 代码如下:

.circle {
  width: 100px;
  height: 100px;
  transform: translate(-50%, -50%) scale(0);
  transition: all 0.3s cubic-bezier(0.075, 0.82, 0.165, 1);
  position: absolute;
  background-image: linear-gradient(to left, #f0d3c0, #f0a574), radial-gradient(circle, #f3ebbf, #ece57e);
  border-radius: 50%;
  animation: scale 0.3s ease-in-out;
}
@keyframes scale {
  to {
    transform: translate(-50%, -50%) scale(3);
    opacity: 0;
  }
}
const rippleButton = btn => {
  btn.addEventListener('click', e => {
    const x = e.clientX,
      y = e.clientY,
      left = btn.offsetLeft,
      top = btn.offsetTop,
      cX = x - left,
      cY = y - top;
    const span = document.createElement('span');
    span.classList.add('circle');
    btn.appendChild(span);
    setTimeout(() => span.remove(), 1000);
  });
};

调用方式:

rippleButton(document.querySelector('.btn'));

应用场景

rippleButton.html 如下:

结果如下:

<iframe src="codes/javascript/html/rippleButton.html"></iframe>