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

為了賬號(hào)安全,請及時(shí)綁定郵箱和手機(jī)立即綁定

動(dòng)畫過程中的bug

根據(jù)老師的實(shí)現(xiàn)我自己寫了一段代碼,跟老師的不太一樣,但是動(dòng)畫過程中有一定幾率出現(xiàn)bug。代碼如下:

	<script>
		window.onload=function(){

			var?myDiv=document.getElementById('box1');
			var?timer=null;
			myDiv.onmouseover=function(event){
				timer=setTimeout(move,30);

				function?move(){
					clearTimeout(timer);
					if(myDiv.offsetLeft>=0)?return;
					else{
						myDiv.style.left?=?myDiv.offsetLeft?+?5?+'px';
						setTimeout(move,30);
					}
				}
			}

			myDiv.onmouseout=function(event){
				timer=setTimeout(move,30);

				function?move(){
					clearTimeout(timer);
					if(myDiv.offsetLeft<=-600)?return;
					else{
						myDiv.style.left?=?myDiv.offsetLeft?-5?+'px';
						setTimeout(move,30);
					}
				}
			}

		}
		
		

	</script>

我把div的寬度設(shè)置為600px,left值也為-600px,然后執(zhí)行代碼,在動(dòng)畫過程中反復(fù)觸發(fā)鼠標(biāo)事件?;蛘咧苯佑|摸span標(biāo)簽。有時(shí)候動(dòng)畫就一直執(zhí)行,閃來閃去,不會(huì)停止。

我的分析是mouseover的結(jié)束條件是left>=0,mouseout的結(jié)束條件是left<=-600,當(dāng)在動(dòng)畫過程中,即mouseover未結(jié)束時(shí),又觸發(fā)了mouseout事件。left的值就可能永遠(yuǎn)位于-600到0之間。動(dòng)畫就不會(huì)停止。

請問大神這樣分析對不?有什么方法解除這種bug?

另外如果要實(shí)現(xiàn)無論是否在動(dòng)畫執(zhí)行過程中,鼠標(biāo)over上時(shí),left就增加,鼠標(biāo)移開,馬上left減小這樣的效果,有什么方法?

正在回答

4 回答

又看了下代碼: 發(fā)現(xiàn)了其實(shí)主要是沒能有效的清除定時(shí)器的問題,把代碼改成下面這樣就可以運(yùn)行。

<script>
????window.onload=function(){
????????var?myDiv=document.getElementById('box1');
????????var?timer=null;?????????
????????myDiv.onmouseover=function(event){
????????????move();?
????????????function?move(){
????????????????clearTimeout(timer);
????????????????if(myDiv.offsetLeft>=0)?return;
????????????????else{
????????????????????myDiv.style.left?=?myDiv.offsetLeft?+?5?+'px';
????????????????????timer?=?setTimeout(move,100);
????????????????}
????????????}
????????}
??
????????myDiv.onmouseout=function(event){
????????????move();?
????????????function?move(){
????????????????clearTimeout(timer);
????????????????if(myDiv.offsetLeft<=-600)?return;
????????????????else{
????????????????????myDiv.style.left?=?myDiv.offsetLeft?-5?+'px';
????????????????????timer?=?setTimeout(move,100);
????????????????}
????????????}
????????}
????}
</script>

將函數(shù)提出來放到事件外面定義效率更高,再將兩個(gè)move函數(shù)合并在一起代碼會(huì)更簡潔。

0 回復(fù) 有任何疑惑可以回復(fù)我~

為了讓問題更清晰,我把代碼copy下來,大家可以自己試下效果。 這動(dòng)畫執(zhí)行過程中多次快速觸發(fā)鼠標(biāo)事件,有驚喜哦??!

<!DOCTYPE?html>
<html>
<head>
<meta?charset="UTF-8">
<title>Document</title>
<style>
body{margin:?0;padding:?0;}
#box1{
width:?600px;
height:?100px;
background-color:?#f00;
left:?-600px;
position:?relative;
}
#box1?span{
width:?20px;
height:?50px;
background-color:?#00f;
position:?absolute;
left:?600px;
top:?25px;
}
</style>
</head>
<body>
<div?id="box1">
<span?id="share">分享</span>
</div>
<script>
????window.onload=function(){
????????var?myDiv=document.getElementById('box1');
????????var?timer=null;
????????
????????myDiv.onmouseover=function(event){
????????????timer=setTimeout(move,100);
?
????????????function?move(){
????????????????clearTimeout(timer);
????????????????if(myDiv.offsetLeft>=0)?return;
????????????????else{
????????????????????myDiv.style.left?=?myDiv.offsetLeft?+?5?+'px';
????????????????????setTimeout(move,100);
????????????????}
????????????}
????????}
?
????????myDiv.onmouseout=function(event){
????????????timer=setTimeout(move,100);
?
????????????function?move(){
????????????????clearTimeout(timer);
????????????????if(myDiv.offsetLeft<=-600)?return;
????????????????else{
????????????????????myDiv.style.left?=?myDiv.offsetLeft?-5?+'px';
????????????????????setTimeout(move,100);
????????????????}
????????????}
????????}
?
????}


0 回復(fù) 有任何疑惑可以回復(fù)我~

實(shí)際上只需要把onmouseover和onmouseout改成onmouseenter和onmouseleave就行了,over和out指代的是鼠標(biāo)經(jīng)過和移出,實(shí)際上你從div移動(dòng)到span中按道理來說還是在div內(nèi),但是因?yàn)樯婕傲藄pan的移入移出則會(huì)出現(xiàn)事件冒泡。換成enter和leave(穿入穿出)后不會(huì)觸發(fā)span事件,所以不會(huì)出問題,你可以試試

0 回復(fù) 有任何疑惑可以回復(fù)我~
#1

charsandrew 提問者

謝謝回答。 改成onmouseenter 和 onmouseleave試了下,比前面稍微好了寫,但在動(dòng)畫執(zhí)行過程中多次反復(fù)出發(fā) onmouseenter和onmouseout時(shí),依然有時(shí)會(huì)出現(xiàn)動(dòng)畫卡住的bug。
2017-09-30 回復(fù) 有任何疑惑可以回復(fù)我~

把你的計(jì)時(shí)器settimeout換成setInterval看看,雖然兩個(gè)方法都是延時(shí)加載,但是作用有所不同

0 回復(fù) 有任何疑惑可以回復(fù)我~

舉報(bào)

0/150
提交
取消
JS動(dòng)畫效果
  • 參與學(xué)習(xí)       113920    人
  • 解答問題       1487    個(gè)

通過本課程JS動(dòng)畫的學(xué)習(xí),從簡單動(dòng)畫開始,逐步深入各種動(dòng)畫框架封裝

進(jìn)入課程

動(dòng)畫過程中的bug

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

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

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動(dòng)學(xué)習(xí)伙伴

公眾號(hào)

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