当前位置: 首页 > Web前端 > HTML

使用CSS实现逼真的水波纹点击效果

时间:2023-04-02 19:00:44 HTML

本文专门介绍如何使用CSS完成水波纹效果。层层的div虽然webkit有遮罩(webkitmask)的能力,webkit虽然强大,但是在跨浏览器中始终是它的遮罩,在性能上经常会造成麻烦(这也是chrome需要这样消耗资源的原因),那么撇开webkit不谈,我们应该用什么方法来制作水波纹的效果呢?答案是使用“堆叠”方法。这个水波纹效果的原理就是把六个div叠在一起,然后最主要的就是设置背景固定:background-attachment:fixed;,然后把背景的尺寸调大如果调小,它可以完成。只需将六个div堆叠在一起并使用CSS动画使六个div依次出现即可。HTML:

CSS:.wave{position:absolute;顶部:计算((100%-30px)/2);左:计算((100%-30px)/2);宽度:30px;高度:30px;border-radius:300px;}.wave0{背景:#f00;z-索引:2;背景大小:自动106%;动画:w1s前进;}.wave1{背景:#d00;z-索引:3;动画:w1s.2s前进;}.wave2{背景:#b00;z-索引:4;动画:w1s.4sforwards;}.wave3{background:#900;z-索引:5;动画:w1s.5sforwards;}.wave4{background:#700;z-索引:6;动画:w1s.8sforwards;}.wave5{background:#500;z-索引:7;animation:w1s1sforwards;}@keyframesw{0%{top:calc((100%-30px)/2);左:计算((100%-30px)/2);宽度:30px;高度:30px;}100%{顶部:计算((100%-300px)/2);左:计算((100%-300px)/2);宽度:300px;高度:300px;}}做水波有几个地方需要注意,第一个是因为position使用的是绝对位置(absolute),所以我们肯定很难把所有的div定位到圆心。这时候就必须要用到CSS3的一个好用的工具:calc,calc可以自动计算出位置。这样,我们直接让CSS帮我们算出圆心就相当方便了(注意!calc的+和-号前后必须有空格,否则会出错),然后每个动画需要一个个加延迟时间,这样才能一个个弹出,如果我们把半径设置大一点,就会变成圆形或者椭圆!了解了水波纹的原理后,我们只需要将上面的颜色改成背景图就可以顺利的产生水波纹了。HTML:CSS:.wave{position:absolute;顶部:计算((100%-30px)/2);左:计算((100%-30px)/2);宽度:30px;高度:30px;边框半径:300px;background:url(图片路径);背景附件:固定;背景位置:中心中心;}.wave0{z-index:2;背景大小:自动106%;animation:w1sforwards;}.wave1{z-index:3;背景大小:自动102%;animation:w1s.2sforwards;}.wave2{z-index:4;背景大小:自动104%;animation:w1s.4sforwards;}.wave3{z-index:5;背景大小:自动101%;animation:w1s.5sforwards;}.wave4{z-index:6;背景大小:自动102%;animation:w1s.8sforwards;}.wave5{z-index:7;背景大小:自动100%;动画:w1s1s向前;}@keyframesw{0%{top:calc((100%-30px)/2);左:计算((100%-30px)/2);宽度:30px;高度:30px;}100%{top:calc((100%-300px)/2);左:计算((100%-300px)/2);宽度:300px;高度:300px;}}比较逼真的水波需要注意,就是背景的位置一定要固定(background-attachment:fixed;),然后统一居中背景。这样背景的位置是一样的,但是背景的大小不一样,会欺骗眼睛,让眼睛以为看到的是水波,但是一个小技巧可以让水波看起来更逼真就是让每一个背景尺寸都不一样,也就是说,让水波的振幅越来越小,让背景尺寸从106>102>104>101>102>100,这样会让水波更加逼真!以上就是简单使用CSS制作水波纹的原理。当然最后就是写一段JS,让鼠标点击的瞬间可以产生水波,并且下一个水波必须覆盖上一个水波,然后水波产生后自动消失,避免过多的div导致屏幕延迟jQuery:varmx,my,timer;varz=2;$(document).on('click',function(e){mx=e.pageX;my=e.pageY;z=z+1;_wave(mx,my,z);});function_wave(i,j,k){$('.ui-content').prepend(''+''+''+''+''+''+''+''+''+'');setTimeout(function(){$('.water'+k).remove();},3000);}要获取有效的完整代码: