当前位置:首页 > JavaScript

js实现波纹

2026-02-02 05:35:26JavaScript

实现波纹效果的方法

使用JavaScript实现波纹效果可以通过监听点击事件,动态创建并动画化一个圆形元素来模拟水波纹扩散的效果。以下是实现步骤:

HTML结构

<button class="ripple-button">点击我</button>

CSS样式

.ripple-button {
  position: relative;
  overflow: hidden;
  padding: 12px 24px;
  background-color: #6200ee;
  color: white;
  border: none;
  border-radius: 4px;
  cursor: pointer;
}

.ripple {
  position: absolute;
  border-radius: 50%;
  background-color: rgba(255, 255, 255, 0.7);
  transform: scale(0);
  animation: ripple 600ms linear;
  pointer-events: none;
}

@keyframes ripple {
  to {
    transform: scale(4);
    opacity: 0;
  }
}

JavaScript代码

document.querySelectorAll('.ripple-button').forEach(button => {
  button.addEventListener('click', function(e) {
    const ripple = document.createElement('span');
    ripple.classList.add('ripple');

    const rect = this.getBoundingClientRect();
    const size = Math.max(rect.width, rect.height);
    const x = e.clientX - rect.left - size / 2;
    const y = e.clientY - rect.top - size / 2;

    ripple.style.width = ripple.style.height = `${size}px`;
    ripple.style.left = `${x}px`;
    ripple.style.top = `${y}px`;

    this.appendChild(ripple);

    ripple.addEventListener('animationend', () => {
      ripple.remove();
    });
  });
});

实现原理

  1. 创建基本按钮结构并设置position: relativeoverflow: hidden,这是为了限制波纹效果在按钮范围内显示。

  2. 当按钮被点击时,创建一个span元素作为波纹效果的基础元素,并添加ripple类。

  3. 计算点击位置相对于按钮的位置,确保波纹从点击点开始扩散。

  4. 设置波纹元素的大小为按钮宽高中的最大值,确保波纹能完全覆盖按钮。

  5. 使用CSS动画实现波纹扩散效果,通过scale变换使元素从小到大,同时逐渐降低透明度。

  6. 动画结束后移除波纹元素,避免DOM中积累过多无用元素。

增强版本

如果需要更高级的效果,可以添加以下改进:

document.querySelectorAll('.ripple-button').forEach(button => {
  button.addEventListener('mousedown', function(e) {
    if (e.button !== 0) return; // 只响应左键点击

    const ripple = document.createElement('span');
    ripple.classList.add('ripple');

    const rect = this.getBoundingClientRect();
    const size = Math.max(rect.width, rect.height);
    const x = e.clientX - rect.left - size / 2;
    const y = e.clientY - rect.top - size / 2;

    ripple.style.width = ripple.style.height = `${size}px`;
    ripple.style.left = `${x}px`;
    ripple.style.top = `${y}px`;

    const existingRipples = this.querySelectorAll('.ripple');
    existingRipples.forEach(r => r.remove());

    this.appendChild(ripple);
  });
});

这个版本做了以下改进:

  • 使用mousedown事件而非click事件,响应更快
  • 检查鼠标按键,确保只有左键会触发效果
  • 移除之前未完成的波纹效果,避免重叠

浏览器兼容性

这种方法在现代浏览器中都能良好工作,包括Chrome、Firefox、Safari和Edge。如果需要支持较旧的浏览器,可能需要添加CSS前缀:

@keyframes ripple {
  to {
    -webkit-transform: scale(4);
    transform: scale(4);
    opacity: 0;
  }
}

性能考虑

  1. 使用requestAnimationFrame可以进一步优化动画性能
  2. 避免在快速连续点击时创建过多波纹元素
  3. 考虑使用CSS硬件加速(如transformopacity)来提高动画流畅度

这种波纹效果实现方式轻量且高效,适合大多数Web应用场景。

js实现波纹

标签: 波纹js
分享给朋友:

相关文章

js实现轮播

js实现轮播

实现轮播图的基本思路 轮播图的核心逻辑是通过定时切换展示的图片或内容,通常结合左右滑动按钮和指示器(小圆点)增强交互性。以下是基于原生JavaScript的实现方法。 HTML结构 构建轮播图的H…

js实现轮播图

js实现轮播图

基础轮播图实现 使用HTML、CSS和JavaScript实现一个简单的自动轮播图。HTML结构包含一个容器和多个图片项。 <div class="slider"> <div…

js实现类

js实现类

JavaScript 实现类的几种方式 JavaScript 是一种基于原型的语言,但在 ES6 之后引入了 class 语法糖,使得实现类更加直观。以下是几种常见的实现方式: 使用构造函数 传统的…

js实现列表

js实现列表

使用 JavaScript 实现列表 JavaScript 提供了多种方式来实现列表功能,包括数组操作、DOM 元素动态生成等。以下是几种常见的实现方法: 使用数组存储列表数据 数组是 JavaS…

js实现点击显示和隐藏

js实现点击显示和隐藏

实现点击显示和隐藏的JavaScript方法 使用classList.toggle切换类名 通过添加/移除CSS类控制元素的显示与隐藏,需提前在CSS中定义隐藏样式(如display: none)。…

使用js实现

使用js实现

使用JavaScript实现 JavaScript可以通过Math.random()函数生成随机数,结合其他方法可以实现多种随机数生成需求。 // 生成0到1之间的随机小数 const random…