第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號安全,請及時綁定郵箱和手機立即綁定

我在做多目標聯(lián)動時為什么就會出錯?

根據(jù)《js動畫效果》課程中5-1節(jié),我自己實踐了一下,發(fā)現(xiàn)如果只對單獨一個對象做動畫可以實現(xiàn)鏈式動畫效果,但一旦對多個對象(比如lis = getElementsByTagName("li")中的每個lis[i])添加動畫效果后,鼠標移動到對象上時就會出錯。瀏覽器調(diào)試錯誤截屏如下:

http://img1.sycdn.imooc.com//57148f090001f08513660029.jpg

我的html代碼如下:

<!DOCTYPE?html>
<html>
<head>
	<meta?charset="UTF-8">?
	<title>分享欄js動畫</title>
	<script?type="text/javascript"?src="js/action.js"></script>

	<style?type="text/css">
		*{
			margin:?0;
			padding:0;
		}
		ul{
			margin-top:?30px;
			list-style:?none;
		}
		ul?li{
			width:?200px;
			height:?50px;
			background-color:?red;
			margin-bottom:?20px;
			border:2px?solid?#000;
			filter:alpha(opacity:30);
			opacity:?0.3;
		}
	</style>
	<script?type="text/javascript">
		window.onload?=?function(){
			var?lis?=?document.getElementsByTagName("li");
			var?li?=?document.getElementById("li");
			var?timer?=?null;//定義定時器
			var?alpha?=?0;
			/*li.onmouseover?=?function(){
				startAct(li,"height",100,function(){
					startAct(li,?"width",400);
				});
			}
			li.onmouseout?=?function(){
				startAct(li,"width",200,function(){
					startAct(li,?"height",50);
				});
			}*/
			for(var?i=0;?i<lis.length;?i++){
				//寬度/高度變化
				lis[i].timer?=?null;//為每個lis對象定義一個timer
				lis[i].onmouseover?=?function(){
					startAct(this,"height",100,function(){
						//alert(1);
						startAct(this,"width",400);
					});
				}
				lis[i].onmouseout?=?function(){
					startAct(this,"height",50);
				}
			}

		}

	</script>
</head>
<body>
	<ul>
		<li?id="li"></li>
		<li></li>
		<li></li>
	</ul>	
</body>
</html>

js代碼如下(js/action.js):

function?startAct(obj,type,iTarget,fn){//obj指作用對象,type指被改變的屬性,ITarget指改變的目標值
	//初始化清除定時器
	clearInterval(obj.timer);

	var?speed?=?0;//定義速度
	obj.timer?=?setInterval(function(){
		if(type?==?"alpha"){//如果是透明度變化
			if(obj.alpha?>?iTarget){
				speed?=?-10;
			}else{
				speed?=?10;
			}
			if(obj.alpha?==?iTarget){
				clearInterval(obj.timer);
			}else{
				obj.alpha?=?obj.alpha+speed;
				obj.style.filter?=?"alpha(opacity:"+obj.alpha+")";
				obj.style.opacity?=?obj.alpha/100;	
			}
		}else{//如果不是透明度變化
			//獲取對象容器當前屬性的值
			var?oStyleValue?=?parseInt(getStyle(obj,type));
			//判斷速度正負情況下的取值
			speed?=?speed>0???Math.ceil((iTarget-oStyleValue)/5)?:?Math.floor((iTarget-oStyleValue)/5);
			//判斷對象是否運行到目標值
			if(oStyleValue?==?iTarget){
				clearInterval(obj.timer);
				if(fn){
					fn();
				}
			}else{
				obj.style[type]?=?oStyleValue?+?speed?+"px";				
			}
				
		}
	},30);
}

//獲取obj對象某屬性當前具體值
function?getStyle(obj,?type){
	if(obj.currentStyle){//IE瀏覽器
		return?obj.currentStyle[type];
	}else{//Firefox瀏覽器
		return?getComputedStyle(obj,false)[type];
	}
}


正在回答

1 回答

startAct(this,"height",100,function(){

????????????????????????//alert(1);

????????????????????????startAct(this,"width",400);

????????????????????});

你這里的對象參數(shù)第二個不能為this,第二個this是函數(shù),不是li


你可以var _this = this;

startAct(_this,"height",100,function(){

????????????????????????//alert(1);

????????????????????????startAct(_this,"width",400);

????????????????????});

,這樣是OK的


2 回復 有任何疑惑可以回復我~
#1

kevine099

牛,確實如此
2016-04-18 回復 有任何疑惑可以回復我~
#2

緘默蜀黍ONE 提問者

非常感謝!
2016-04-18 回復 有任何疑惑可以回復我~
#3

緘默蜀黍ONE 提問者

開始一直都以為那個this指代每次遍歷后的對象,苦了我了,想了半個下午[/笑哭][/捂臉],再次感謝大神指點d=====( ̄▽ ̄*)b
2016-04-18 回復 有任何疑惑可以回復我~

舉報

0/150
提交
取消

我在做多目標聯(lián)動時為什么就會出錯?

我要回答 關(guān)注問題
微信客服

購課補貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動學習伙伴

公眾號

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號