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

js 按钮水波纹

在JavaScript中实现按钮水波纹效果,通常会结合CSS动画来完成。以下是基础概念、优势、类型、应用场景以及实现方式:

基础概念

水波纹效果是一种视觉反馈,当用户点击按钮时,会在按钮上产生一个向外扩散的波纹动画,增强用户体验。

优势

  1. 提升用户体验:给予用户明确的点击反馈。
  2. 美观:使界面更加生动和现代。
  3. 无障碍:对于视觉障碍用户,可以通过屏幕阅读器等辅助技术感受到点击效果。

类型

  1. 单一颜色水波纹:最常见,波纹颜色固定。
  2. 多色水波纹:波纹颜色随时间或位置变化。
  3. 自定义形状水波纹:可以创建非圆形的波纹效果。

应用场景

  • 移动应用中的按钮点击反馈。
  • 网页设计中的交互元素。
  • 需要强调点击动作的场景。

实现方式

以下是一个简单的JavaScript和CSS实现示例:

HTML

代码语言:txt
复制
<button class="ripple-button">点击我</button>

CSS

代码语言:txt
复制
.ripple-button {
  position: relative;
  overflow: hidden;
  background-color: #6200ea;
  color: white;
  border: none;
  padding: 15px 30px;
  font-size: 16px;
  cursor: pointer;
}

.ripple {
  position: absolute;
  border-radius: 50%;
  transform: scale(0);
  animation: ripple-animation 0.6s linear;
}

@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.classList.add('ripple');

    const rect = button.getBoundingClientRect();
    circle.style.left = `${e.clientX - rect.left - radius}px`;
    circle.style.top = `${e.clientY - rect.top - radius}px`;

    button.appendChild(circle);

    setTimeout(() => circle.remove(), 600);
  });
});

解释

  1. HTML:定义了一个按钮。
  2. CSS:设置了按钮的基本样式和水波纹动画效果。
  3. JavaScript:监听按钮的点击事件,创建一个水波纹元素,并设置其位置和大小,然后添加到按钮上,最后在动画结束后移除该元素。

常见问题及解决方法

  1. 水波纹超出按钮范围:确保水波纹元素的父容器(按钮)设置了overflow: hidden
  2. 水波纹位置不正确:使用getBoundingClientRect获取按钮的位置,并根据点击事件的坐标计算水波纹的位置。
  3. 动画不流畅:优化CSS动画性能,使用transformopacity属性,这些属性在GPU上加速渲染。

通过这种方式,你可以轻松实现一个美观且具有良好用户体验的水波纹效果。

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

相关·内容

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

    和尚想自定义一个水波纹按钮,即默认向外扩散的水波样式;实现方式有很多种,和尚尝试最基本的 AnimationController 逐层绘制来处理,和尚简单记录一下尝试过程; ACEWaterButton...和尚画了一个简单的图如下,预期的水波纹按钮包括两层,以中心圆(蓝色)为基础逐步向外围扩散至(绿色),并循环重复; 1....水波纹 和尚预想实现水波纹效果则必然离不开 Animation 动画,使用动画方式也有多种,可以继承 AnimatedWidget 也可以使用 AnimationController 自定义动画样式...; 和尚预期水波纹不仅范围逐渐变大,并且在扩散过程中透明度逐渐降低,至外围最大范围为止消失;和尚采用最基本的 CustomPainter 自定义 Canvas.drawCircle,根据时间进度来逐层绘制水波纹...,和尚默认设置为 true 进行重绘; ---- ACEWaterButton 案例源码 ---- 和尚对 ACEWaterButton 水波纹按钮的简单效果已满足,但还不够完善,对于重绘的机制还需要优化

    86430

    对抗蠕虫 —— 如何让按钮不被 JS 自动点击

    在社交网络里,很多操作都是通过点击按钮发起的,例如发表留言。...演示 Demo: http://www.etherdream.com/FunnyScript/anti-xssworm/ 注意:这个案例不是看能不能注入 XSS,而是看能不能通过当前页面的 JS 自动发留言...这里为简单,省略了登录态;真实场合下,会话 Cookie 是 HttpOnly 的,无法被 JS 获取到,也就无法让第三方服务器代替发表。...细节: 使用者加载 safebutton.js,引入 SafeButton 类 使用者实例化 SafeButton 对象 A,创建出一个不同源的 iframe 作为按钮界面 用户点击 iframe 按钮后...并且该方案的改造成本也不是很大,后端只是增加一个 referer 判断而已;前端也只需改造个别按钮,例如发帖按钮,像点赞这种按钮就没必要保护了。 觉得本文对你有帮助?请分享给更多人。

    9.2K60

    Android 水波纹效果的探究

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

    2.4K20

    JS解决页面刷新导致按钮OnClientClick事件消失问题

    OnClientClick 提供客户端JS执行能力,并以 return false 或 return true 来决定是否继续执行 OnClick 事件,OnClick 事件执行服务器方法,执行 OnClick...class="btn btn-white" Text="发送短信验证码" onclick="sendButton_Click" /> OnClientClick 事件执行 sendReady() JS...另外如果点击此按钮将其置为不可用状态(this.disabled = true;), 再去调用其它服务器按钮事件,如下图: 图中的发送按钮点击成功后,暂时按钮不可用。...此时去操作其它服务器按钮,如上传图片。则可能会出现不可用按钮恢复可用状态时,点击后直接执行了服务器方法,即 OnClientClick 事件属性消失。...(disabled = true;),即使客户端 JS 返回 return true ,也无法调用服务器方法,需要通过 JS 引用,简单的引用方法,我们可以调用如下代码: __doPostBack(document.getElementById

    13110
    领券