1. 程式人生 > >js運動kuaji

js運動kuaji

<!DOCTYPE html>
<html lang="en">
<head>
	<meta charset="UTF-8">
	<title>鏈式運動</title>
	<style>
		#div1{width: 100px;height: 100px;background: red;filter(alpha(opacity: 30));opacity: 0.3;}
	</style>
	<script>
	window.onload = function(){
		var oDiv = document.getElementById('div1');

		oDiv.onmouseover = function(){
			startMove(this,"width",200,function(){
				startMove(oDiv,"height",200,function(){
					startMove(oDiv,"opacity",100);
				});
			});
		}

		oDiv.onmouseout = function(){
			startMove(this,"opacity",30,function(){
				startMove(oDiv,"height",100,function(){
					startMove(oDiv,"width",100);
				});
			});
		}
	}
	//獲取元素屬性值
	function getStyle(obj,attr){
		if(obj.currentStyle){
			return obj.currentStyle[attr];
		}else{
			return getComputedStyle(obj,false)[attr];
		}
	}
	//運動函式
	function startMove(obj,attr,iTarget,fn){
		clearInterval(obj.timer);

		obj.timer = setInterval(function(){
			//1.獲取當前值
			var iCur = 0;
			/*
				獲取當前值時,對透明度進行特殊的處理,
				特別要注意對透明度小數的處理
			*/
			if(attr == "opacity"){
				iCur = parseInt(parseFloat(getStyle(obj,attr))*100);
			}else{
				iCur = parseInt(getStyle(obj,attr));
			}


			//2.獲取速度
			var iSpeed = (iTarget - iCur)/8;
			iSpeed = iSpeed > 0 ? Math.ceil(iSpeed) : Math.floor(iSpeed);


			//3.檢測停止
			if(iCur == iTarget){
				clearInterval(obj.timer);
				//鏈式運動判斷
				if(fn){
					fn();
				}
			}else{
				if(attr == "opacity"){
					obj.style.filter = "alpha(opacity:"+iCur+iSpeed+")";
					obj.style.opacity = (iCur + iSpeed)/100;
				}else{
					obj.style[attr] = iCur + iSpeed + "px";
				}
			}
		},30);
	}
	</script>
</head>
<body>
	<div id="div1"></div>
</body>
</html>

6.完美運動框架