首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

js水波纹

“JS水波纹”通常指的是一种在网页上通过JavaScript实现的视觉效果,当用户点击或触摸某个元素时,会在该元素周围产生一个逐渐扩散的水波纹动画。这种效果常用于增强用户界面的交互性和美观性。

基础概念

水波纹效果是通过在HTML元素上叠加一个或多个圆形的CSS动画来实现的。这些圆形会从点击位置开始,逐渐扩大并最终消失。

相关优势

  1. 增强用户体验:通过视觉反馈让用户知道他们的操作已被系统识别。
  2. 美观性:为界面增添动感和现代感。
  3. 无障碍性:对于视力障碍的用户,这种效果可以提供额外的触觉反馈。

类型

  • 点击水波纹:仅在用户点击时触发。
  • 触摸水波纹:在触摸设备上,用户触摸屏幕时触发。
  • 长按水波纹:用户长时间按压某个元素时触发。

应用场景

  • 按钮点击:在按钮上添加水波纹效果,提升交互体验。
  • 卡片选择:在列表项或卡片上添加,使选择操作更加直观。
  • 导航菜单:在导航链接上应用,增强导航的动态感。

实现示例

以下是一个简单的JavaScript和CSS实现水波纹效果的例子:

HTML

代码语言:txt
复制
<button class="ripple-button">Click Me</button>

CSS

代码语言:txt
复制
.ripple-button {
  position: relative;
  overflow: hidden;
  padding: 10px 20px;
  border: none;
  background-color: #007bff;
  color: white;
  cursor: pointer;
}

.ripple {
  position: absolute;
  border-radius: 50%;
  transform: scale(0);
  animation: ripple-animation 0.6s linear;
  background-color: rgba(255, 255, 255, 0.7);
}

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

JavaScript

代码语言:txt
复制
document.querySelectorAll('.ripple-button').forEach(button => {
  button.addEventListener('click', function (e) {
    const circle = document.createElement('span');
    const diameter = Math.max(button.clientWidth, button.clientHeight);
    const radius = diameter / 2;

    circle.style.width = circle.style.height = `${diameter}px`;
    circle.style.left = `${e.clientX - button.offsetLeft - radius}px`;
    circle.style.top = `${e.clientY - button.offsetTop - radius}px`;
    circle.classList.add('ripple');

    const ripple = button.getElementsByClassName('ripple')[0];

    if (ripple) {
      ripple.remove();
    }

    button.appendChild(circle);
  });
});

可能遇到的问题及解决方法

问题1:水波纹效果不流畅

  • 原因:可能是由于浏览器性能问题或动画帧率过低。
  • 解决方法:优化CSS动画,减少不必要的DOM操作,或者使用requestAnimationFrame来控制动画帧率。

问题2:水波纹位置不准确

  • 原因:点击位置的坐标计算可能有误。
  • 解决方法:确保在计算水波纹位置时考虑到了元素的偏移量和滚动位置。

问题3:水波纹效果在移动设备上不触发

  • 原因:可能是由于移动端事件处理的问题。
  • 解决方法:确保同时监听了touchstartclick事件,并处理好两者的兼容性问题。

通过以上方法,你可以实现一个简单且高效的水波纹效果,并解决在实现过程中可能遇到的问题。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

  • Android 水波纹效果的探究

    长按水波纹扩展效果 前言 水波纹效果从Android5.0就已经出来了,基本的使用相信大家都知道了,这里多谈一些相对深层次的使用: 1、基本使用 2、水波纹效果与布局绘制之间的问题 3、长按水波纹扩散效果...4、Button点击的水波纹效果 基本使用 系统自带水波纹实现方式 有界水波纹 android:background="?...android:attr/selectableItemBackgroundBorderless" 自定义水波纹实现方式 无界水波纹 水波纹可以达到长按扩散的效果,只是它会超出边界,那我们就在对应的父布局加一层有边界的水波纹背景即可。...参考资料 Ripple 水波纹效果 聊聊Android5.0中的水波纹效果 解决点击ripple水波纹无效的问题 UI之修改Button颜色保持默认点击效果

    2.4K20

    Android OpenGL ES 实现动态(水波纹)涟漪效果

    动态(水波纹)涟漪效果 1 水波纹效果原理 最近一个做视频滤镜的朋友,让我给他做一个动态水波纹效果,具体就是:点击屏幕上的某一位置,然后波纹以该位置为中心向周围扩散。...模拟物理世界中的水波纹 最后观察出,物理世界中水波纹的特点如上图所示,从水面的正上方往下看,在凹面上方观察到的是缩小效果,而在凸面上方观察到的是放大效果,然后整个水波纹效果就是放大和缩小效果的交叉排列...因此,我们得出结论,水波纹(涟漪)效果实际上就是一组组相互交替、幅度向外部逐渐减小的缩小放大效果组合。 本文将水波纹模型简化成一组放大和缩小效果随时间逐步向外部偏移。...水波纹模型原理 发生形变区域的宽度为固定值 2*u_Boundary ,然后这个形变区域随着 u_Time 的变大逐步向外侧移动,最后就形成了动态的水波纹效果。...2 水波纹效果实现 基于上节的原理分析,实现水波纹效果的主要原理就是实现一定区域内的缩小和放大效果,我们以平滑函数的输出值作为纹理采样坐标的偏移程度。

    2.3K20

    手撕一个让人「欲罢不能」的水波纹选中控件

    但是系统自带的水波纹效果只是一个短暂的点击响应过程,也就是最后水波纹消失了。 如果要让水波纹扩散后保持住,比如实现一个水波纹选中效果,就无法实现了。 原生的水波纹效果就不说了,相信大家都会。...获取点击,计算水波纹最长半径 记录水波纹圆心坐标 center 上面的代码中,重写了 onTouchEvent ,并在接收到按下事件时,开始扩展水波或者收缩水波纹,并且记录下手指按下的位置,这个位置就是水波纹的圆心...先绘制底部 SRC (圆角矩形),然后设置水波纹画笔的 xfermode ,接着绘制 DST (水波纹),最后取消混合模式。 这样,一个带圆角的水波纹就实现了。...简单说一下收缩 水波纹 的过程: 在水波纹 已经展开 ,或者在 扩散的过程中 ,用户再次点击了控件,这时候,需要把水波纹 收缩回来 。...如此,水波纹就收缩回去了。 五、收尾 最后就是一些收尾处理了: 加入xml可配置属性,如水波纹颜色,阴影大小,阴影颜色,圆角大小等 加入状态回调,把当前水波纹的状态传递出去 ....

    1.1K40

    【Flutter 专题】133 图解自定义 ACEWaterButton 水波纹按钮

    和尚想自定义一个水波纹按钮,即默认向外扩散的水波样式;实现方式有很多种,和尚尝试最基本的 AnimationController 逐层绘制来处理,和尚简单记录一下尝试过程; ACEWaterButton...和尚画了一个简单的图如下,预期的水波纹按钮包括两层,以中心圆(蓝色)为基础逐步向外围扩散至(绿色),并循环重复; 1....水波纹 和尚预想实现水波纹效果则必然离不开 Animation 动画,使用动画方式也有多种,可以继承 AnimatedWidget 也可以使用 AnimationController 自定义动画样式...; 和尚预期水波纹不仅范围逐渐变大,并且在扩散过程中透明度逐渐降低,至外围最大范围为止消失;和尚采用最基本的 CustomPainter 自定义 Canvas.drawCircle,根据时间进度来逐层绘制水波纹...和尚在通过 ACEWaterPainter 绘制水波纹过程中,起始位置从内置圆开始,那是否可以省略第一步的内置圆呢?

    86430
    领券