Tween.js各種曲線運動


<!DOCTYPE html>
<html>
	<head>
		<meta charset="utf-8" />
		<title>變速運動</title>
		<style type="text/css">
			*{
				margin: 0;
				padding: 0;
			}
			#box{
				width: 100px;
				height: 100px;
				background: red;
				position: absolute;
				top: 0px;
				left: 0px;
				opacity: 1;
				filter: alpha(opacity=100);
			}
		</style>
	</head>
	<body>
		<script src="js/Tween.js" type="text/javascript" charset="utf-8"></script>
		<div id="box"></div>
		<script type="text/javascript">
			var oBox = document.getElementById("box");
			//調用函數,傳參
			animate( oBox ,  {'width':300,'height':250,'top':300,'left':200,'opacity':0.4} , 2000 , 'linear'  ,function(){
				animate( oBox ,  {'width':100,'height':50,'top':100,'left':100,'opacity':0.8} , 2000 , 'linear');
			} );
			function animate( obj , Json , time , ev , fn ){
				//判斷缺省參數,最好把參數都放到一個json中,可以隨意傳參
				if( typeof time == 'undefined' )
				{
					time = 1000;
					ev = 'linear';
				}
				else if( typeof time == 'string' )
				{
					fn = ev;
					ev = time;
					time = 1000;
				}
				else if( typeof ev == 'function' )
				{
					fn = ev;
					ev = 'linear';
				}
				else if( typeof time == 'function' )
				{
					fn = time;
					ev = 'linear';
					time = 1000;
				}
				ev = ev || event;
				//定義一個json  oB來存儲運動前的初始狀態下的屬性值,即運動的初始位置
				var oB = {};
				for( attr in Json )
				{
					oB[attr] = parseInt( getStyle( obj , attr ) );
				}
				//定義一個json  oC來存儲運動結束位置與當前位置的差值
				var oC = {};
				for( attr in Json )
				{
					oC[attr] = Json[attr] - parseInt( getStyle( obj , attr ) );
				}
				//獲取當前開始時間
				var startTime = new Date().getTime();
				clearInterval(obj.timer);
				//定時器,控制運動時間,時間到,清除
				obj.timer = setInterval( function(){
					//獲取當前時間
					var nowTime = new Date().getTime();
					//獲取運動過程的時間,如果超過設置的運動時間就停止
					var oT = Math.min( nowTime - startTime , time );
					//獲取需要運動的每個屬性
					for( attr in Json )
					{
						//屬性為透明度時
						if( attr == 'opacity' )
						{
							var iCon = Tween[ ev ]( oT , oB[attr] , oC[attr] , time );
							if( isNaN( iCon ) ){
								iCon = 1;
							};
							obj.style.opacity = iCon;
							obj.style.filter = 'alpha(opacity = '+parseInt( (iCon*100) )+')';
						}
						//屬性不為透明度時
						else{
							obj.style[attr] = Tween[ ev ]( oT , oB[attr] , oC[attr] , time ) + 'px';
						}
					}
					//設置時間到,清除定時器,執行回調函數
					if( oT == time )
					{
						clearInterval( obj.timer );
						fn && fn();
					}
				},30 )
			}
			//兼容獲取屬性的屬性值
			function getStyle( obj , attr ){
				return obj.currentStyle ? obj.currentStyle[attr] : getComputedStyle( obj , false )[attr];
			}
		</script>
	</body>
</html>

  


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM