用::after实现按钮波纹效果需JS动态设置点击坐标并绑定CSS动画:按钮设relative定位和overflow:hidden;::after初始隐藏、圆形、居中定位;点击时计算相对坐标写入--x/--y变量;动画从scale(0)opacity(0.6)扩散至scale(3)opacity(0),结束保留状态。

用 ::after 伪元素实现按钮波纹点击效果,核心是:在点击时动态生成一个圆形遮罩,从点击位置中心向外扩散、透明度渐隐。关键在于获取点击坐标、定位伪元素、
触发动画。
按钮本身需设为相对定位(position: relative),以便 ::after 能以它为参考进行绝对定位。伪元素初始隐藏,尺寸为 0,圆角设为 50% 实现圆形。
position: relative; overflow: hidden;(防止波纹溢出)::after 设为 content: ""、position: absolute、border-radius: 50%
opacity: 0; transform: scale(0);
CSS 无法自动读取鼠标位置,必须用 J*aScript 在点击时计算并写入自定义属性(如 --x、--y),再由 ::after 读取。
click 事件event.clientX - button.getBoundingClientRect().left 算出相对于按钮的 X 坐标(同理算 Y)button.style.setProperty('--x', x + 'px') 和 --y 写入伪元素通过 CSS 变量定位,并用 @keyframes 控制扩散+淡出。动画需设为 forwards 保证结束状态保留(避免闪回)。
Codeium
一个免费的AI代码自动完成和搜索工具
345
查看详情
立即学习“前端免费学习笔记(深入)”;
::after 定位:left: var(--x); top: var(--y); transform: translate(-50%, -50) scale(0);
scale(0) opacity(0.6) → scale(3) opacity(0)
transition: transform 0.4s ease, opacity 0.4s ease; 或直接用 animation
快速连点可能导致多个波纹叠加或定位错误。可加简单节流或重置逻辑:
::after 的 transform 和 opacity
getComputedStyle 检查是否正在动画中,跳过重复触发animationend 事件自动清空 --x/--y
基本上就这些。不复杂但容易忽略 JS 坐标计算和伪元素定位的配合。做好这几点,波纹就能稳稳从指尖绽开。
以上就是css按钮想加入波纹点击效果怎么制作_通过::after伪元素扩散并结合动画的详细内容,更多请关注其它相关文章!
相关文章:
不同用户不同价格! 索尼开启账户个性化定价测试
QQ邮箱在线使用入口 QQ邮箱个人账号网页版登录
Golang如何测试channel通信行为_Golang channel通信测试与分析方法
J*aScript Promise链中如何正确终止后续.then执行并处理错误
拼多多视频播放卡顿如何处理 拼多多视频播放优化技巧
J*aScript实现单选按钮与关联输入框的联动禁用教程
Lar*el拼写容错搜索策略:基于语音编码的优化实践
韩小圈电脑版在线入口_网页版免费登录地址
CKEditor 5 自定义构建在React应用中渲染失败的调试与解决
蛙漫限时开放最深处链接_蛙漫全站漫画会员同款秒开地址
夸克浏览器桌面版同步不了书签怎么处理 夸克浏览器跨设备同步异常解决方案
SteamMachine定价或为699美元 大家想入手吗?
Tabulator表格中精确实现日期时间排序的指南
Sublime Text怎么显示空格和制表符_Sublime显示不可见字符设置
Pandas DataFrame:高效添加条件计算列
探索高级语言到C/C++的转译路径:以Go为例及内存管理策略
优化Log4j2控制台输出性能:解决异步日志瓶颈
解决macOS上安装pyhdf时‘hdf.h’文件缺失的编译错误
PHP基于会话的用户类型页面访问控制指南
使用PHP从URL路径中提取倒数第二个片段
Node.js 中使用 node-cron 实现定时 API 数据抓取与处理
解决Python logging 中 datefmt 导致时间戳固定不变的问题
抖音网页版平台入口 抖音网页版官网在线访问教程
Promise错误处理:在catch后终止链式then执行的策略
狙击外星人小游戏开始_狙击外星人小游戏立即开始
Win11怎么关闭触摸屏_Windows 11禁用HID符合标准触摸屏
UC浏览器官网入口2025最新 UC浏览器网页版正式地址
漫蛙manwa2最新登录网址_漫蛙manwa2手机网页版入口
知音漫客正版漫画平台_知音漫客官网账号登录
Golang如何实现状态模式管理对象状态_Golang State模式实现技巧
葱吃多了会怎样 葱吃多了会伤胃吗
Golang如何通过reflect操作map_Golang reflect map操作与遍历技巧
c++如何实现一个简单的ECS框架_c++数据驱动设计与游戏开发
顺丰快递查单号物流信息 顺丰快递小程序查询入口
QQ邮箱登录官网首页 腾讯QQ邮箱网页入口
如何配置Composer的PSR-4自动加载_Composer自动加载命名空间映射实践教程
mysql如何设置表访问权限_mysql表访问权限配置
虚幻5科幻题材ARPG大作遭取消!本是《奇异人生》厂商新作
解决移动端滚动问题的overflow属性应用指南
QQ邮箱网页版邮箱入口 QQ邮箱官方登录平台
俄罗斯方块最新版入口 俄罗斯方块在线玩官网入口
PDF文件体积过大处理_PDF压缩技巧详解
腾讯视频怎么使用多账号家庭管理_腾讯视频家庭多账号统一管理与权限分配教程
PySpark中从现有列右侧提取可变长度字符创建新列的教程
QQ邮箱官网登录入口 QQ邮箱网页版邮箱快速登录
J*aScript实现动态背景色下的文本与按钮颜色自适应调整
Django表单提交验证失败后保持字段值不刷新
现代化 SciPy 一维插值:interp1d 的替代方案与最佳实践
css卡片内容溢出如何处理_使用overflow隐藏或scroll显示内容
PHP实现即时文章发布与单次数据库写入:自提交模式教程