按钮点击波浪效果

看到手机app的点击波浪效果感觉挺不错的,自己用js+css写了下这种效果:

效果

点击右侧
点击
点击右侧动画
点击的动画
点击中间右侧
点击中间右侧
效果预览:效果预览

CSS

/*按钮样式*/
#btn{
    width: 200px;
    height: 35px;
    line-height: 35px;
    background-color: #00BB9E;
    color: white;
    outline: none;
    box-shadow: none;
    border: none;
    overflow: hidden;
    position: relative;
}
/*波浪样式*/
.wave{
   position: absolute;
   width: 10px;
   height: 10px;
   transition: all .6s ease-in-out;
   background-color: white;
   opacity: .2;
   border-radius: 9999px;
}

HTML:

<button id="btn">确定 </button>

JS:

	   
//可以执行一次点击效果
//可以执行一次点击效果
var oneClick = true;
document.getElementById("btn").addEventListener('click',function(e){
    //判断是否可以执行一次点击效果
    // --因为执行波浪效果需要时间,一次波浪结束之后允许执行下一次点击
    if (oneClick){
        this.innerHTML += "<div class='wave'></div>";
        //获取点击时的坐标
        var event = e || window.event;
        var x = event.clientX;
        var y = event.clientY;
        //获取按钮的坐标
        var moveX = this.offsetLeft;
        var moveY = this.offsetTop;
        //获取按钮宽度
        var btnWidth = this.clientWidth;
        //设置点击后波浪样式
        var waveDiv = document.querySelector("#btn .wave");
        waveDiv.style.borderRadius = 0;
        waveDiv.style.width = parseInt(btnWidth)*2+'px';
        waveDiv.style.left = x-moveX-5+'px';
        waveDiv.style.marginLeft = -btnWidth+'px';
        waveDiv.style.height = parseInt(btnWidth)*2+'px';
        waveDiv.style.top = y-moveY-5+'px';
        waveDiv.style.marginTop = -btnWidth+'px';
        //定时删除波浪
        setTimeout(function(){
            waveDiv.remove();
            oneClick = true;
        },600);
        //不可以执行一次点击效果
        oneClick = false;
    }else {
        return false;
    }
})

全部代码:

<!doctype html>
<html>
<head>
   <meta charset="UTF-8">
   <title>按钮点击波浪效果</title>
    <style>
        /*按钮样式*/
        #btn{
            width: 200px;
            height: 35px;
            line-height: 35px;
            background-color: #00BB9E;
            color: white;
            outline: none;
            box-shadow: none;
            border: none;
            overflow: hidden;
            position: relative;
        }
        /*波浪样式*/
        .wave{
		   position: absolute;
		   width: 10px;
		   height: 10px;
		   transition: all .6s ease-in-out;
		   background-color: white;
		   opacity: .2;
		   border-radius: 9999px;
		}
    </style>
</head>
<body>
    <button id="btn">确定 </button>
    <script>
        //可以执行一次点击效果
	   var oneClick = true;
	    document.getElementById("btn").addEventListener('click',function(e){
	        //判断是否可以执行一次点击效果
	        // --因为执行波浪效果需要时间,一次波浪结束之后允许执行下一次点击
	        if (oneClick){
	            this.innerHTML += "<div class='wave'></div>";
	            //获取点击时的坐标
	            var event = e || window.event;
	            var x = event.clientX;
	            var y = event.clientY;
	            //获取按钮的坐标
	            var moveX = this.offsetLeft;
	            var moveY = this.offsetTop;
	            //获取按钮宽度
	            var btnWidth = this.clientWidth;
	            //设置点击后波浪样式
	            var waveDiv = document.querySelector("#btn .wave");
	            waveDiv.style.borderRadius = 0;
	            waveDiv.style.width = parseInt(btnWidth)*2+'px';
	            waveDiv.style.left = x-moveX-5+'px';
	            waveDiv.style.marginLeft = -btnWidth+'px';
	            waveDiv.style.height = parseInt(btnWidth)*2+'px';
	            waveDiv.style.top = y-moveY-5+'px';
	            waveDiv.style.marginTop = -btnWidth+'px';
	            //定时删除波浪
	            setTimeout(function(){
	                waveDiv.remove();
	                oneClick = true;
	            },600);
	            //不可以执行一次点击效果
	            oneClick = false;
	        }else {
	            return false;
	        }
	    })
    </script>
</body>
</html>
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值