原生JS实现CSS动画效果

shake()将元素从一边到另一边快速移动或震动,fadeOut()通过指定的时间(默认为500毫秒)降低元素的透明度,使得元素淡出和消失。

<!DOCTYPE html>
<html>
<head>
	<meta http-equiv="content-type" content="text/html; charset=utf-8">
	<title>js实现动画</title>
	<style type="text/css">
	button{
		margin-left: 50px;
	}
	</style>
</head>
<body>
<button onclick="shake(this,fadeOut);">shake and fade</button>
<script type="text/javascript">
	function shake(e,oncompleteFun,distance,time){
		if(typeof e ==='string')
			e=document.getElementById(e);
		if(!distance) distance=20;
		if(!time) time=500;

		var originalStyle=e.style.cssText;
		e.style.position='relative';
		var start=(new Date()).getTime();
		animate();
		function animate(){
			var now=(new Date()).getTime();
			var elapsed=now-start;
			var fraction = elapsed/time;
			if(fraction<1){
				var x=distance*Math.sin(fraction*4*Math.PI);
				console.log('x='+x);
				e.style.left=x+'px';
				setTimeout(animate,Math.min(25,time-elapsed));
			}else{
				e.style.cssText=originalStyle;
				if(oncompleteFun) oncompleteFun(e);
			}
		}
	}
	function fadeOut(e,oncompleteFun,time){
		if(typeof e ==='string')
			e=document.getElementById(e);
		if(!time) time=500;

		var ease=Math.sqrt;

		var start=(new Date()).getTime();
		animate();

		function animate(){
			var elapsed=(new Date()).getTime()-start;
			var fraction = elapsed/time;
			if(fraction<1){
				var opacity = 1-ease(fraction);
				e.style.opacity=String(opacity);
				setTimeout(animate,Math.min(25,time-elapsed));
			}else{
				e.style.opacity='0';
				if(oncompleteFun) oncompleteFun(e);
			}
		}
	}
</script>
</body>
</html>

 

转载于:https://my.oschina.net/u/1778998/blog/881375

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值