JavaScript实现淡入淡出

<!DOCTYPE html>
<html>
<head>
	<title>css动画</title>
</head>
<body>
<script type="text/javascript">
/**
 * 将e转化为相对定位的元素,使之左右“震动”
 * 第一个参数可以是元素对象或者元素的id
 * 如果第二个参数是函数,以e为参数,他将在动画结束时调用
 * 第三个参数指定e震动的距离,默认是5像素
 * 第四个参数指定震动多久,默认是500毫秒
 */
function shake( e , oncomplete , distance , time ){
	//句柄参数
	if(typeof e === "string")
		e = document.getElementById(e);
	if(!time)
		time=500;
     if(!distance)
        distance = 5;
	var orginalStyle = e.style.cssText;		//保存e的原始style
	e.style.position ="relative";			//使e相对定位
	var start = (new Date()).getTime();		//注意:动画的开始时间
	animate();		//动画开始

	//函数检查消耗的时间,并更新e的位置
	//如果动画完成,他将e还原为原始状态
	//否则,它更新e的位置,安排他自身重新运行
	function animate(){
		var now = (new Date()).getTime();	//得到当前时间
		var elapsed = now-start;			//从开始依赖消耗了多长时间
		var fraction = elapsed/time;		//是总时间的几分之几

		if(fraction < 1 ){					//如果话未完成
			//作为动画完成比例的函数,计算e的x位置
			//使用正弦函数将完成比例乘以4pi
			//所以,他来回往复两次
			var x = distance*Math.sin(fraction*4*Math.PI);
			e.style.left = x+"px";

			//在25毫秒后或在总时间的最后尝试再次运行函数
			//目的是为了产生每秒40帧的动画
			setTimeout(animate,Math.min(25,time-elapsed));
		}
		else{			//否则动画完成
			e.style.cssText = orginalStyle;		//恢复原有样式
			if(oncomplete)
				oncomplete(e);
		}
	}
}

/**
 * 以毫秒级的时间将e从完全不透明淡出到完全透明
 * 在调用函数时,假设e是完全不透明的
 * oncomplete是一个可选的函数,以e为参数,它将在动画结束时调用
 * 如果不指定time,默认是500毫秒
 * 该函数在IE中不能正常工作,但也可以修改的能工作
 * 除了opacity,IE使用非标准的filter属性
 */
function fadeOut( e , oncomplete , time ){
	if( typeof e ==="string")
		e = document.getElementById(e);
	if(!time)
		time = 500;

	//使用Math.sqrt作为一个简单的“缓存函数”来创建动画
	//精巧的非线性,一开始淡出的比较快,然后缓慢了一些
	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); 		//设置在e上
			setTimeout(animate,Math.min(25,time-elapsed));
		}else{
			e.style.opacity = "0";
			if(oncomplete) oncomplete(e);
		}
	}
}
</script>
<button οnclick="shake(this,fadeOut)">淡入淡出</button>
</body>
</html>

  

转载于:https://www.cnblogs.com/ctsch/p/6919403.html

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值