zoukankan      html  css  js  c++  java
  • 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 onclick="shake(this,fadeOut)">淡入淡出</button>
    </body>
    </html>
    

      

  • 相关阅读:
    DPDK安装方法 17.12.13
    numa.h:No such file or directory 解决方法
    17秋 软件工程 第六次作业 Beta冲刺 Scrum3
    17秋 软件工程 第六次作业 Beta冲刺 总结博客
    17秋 软件工程 第六次作业 Beta冲刺 Scrum2
    Paper Reviews and Presentations
    17秋 软件工程 第六次作业 Beta冲刺 Scrum1
    17秋 软件工程 第六次作业 Beta冲刺
    error: could not create '/System/Library/Frameworks/Python.framework/Versions/2.7/share': Operation not permitted
    17秋 软件工程 个人作业 软件产品案例分析
  • 原文地址:https://www.cnblogs.com/ctsch/p/6919403.html
Copyright © 2011-2022 走看看