亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

有個Bug一直都想不明白為什么?求大神~

有個Bug一直都想不明白為什么?求大神~

甫里 2016-04-18 22:30:53
window.onload=Move; function?getStyle(obj,attr){ if?(obj.currentStyle)?{ return?obj.currentStyle; }else{ return?getComputedStyle(obj,false)[attr]; } } function?Move(){ var?box=document.getElementById("Box"), box2=document.getElementById("Box2"), box3=document.getElementById("Box3") box.onmouseover=function(){ MoveModelFn(this,{"width":600}); } box.onmouseout=function(){ MoveModelFn(this,{"width":400}); } //同時運動 box2.onmouseover=function(){ var?_this=this; MoveModelFn(_this,{"opacity":100,"width":800});//為什么最后到達不了width?800 } box2.onmouseout=function(){ MoveModelFn(this,{"opacity":30,"width":400});//為什么也恢復到達不了width?400 } box3.onmouseover=function(){ var?_this=this; MoveModelFn(_this,{"height":300},function(){ MoveModelFn(_this,{'width':600}) }); } box3.onmouseout=function(){ var?_this=this; MoveModelFn(_this,{"height":200}); } } //function?MoveModelFn(obj,{attr:iTarget},fn) function?MoveModelFn(obj,json,fn){ clearInterval(obj.timer); obj.timer=setInterval(function(){ var?flag=true; for(var?attr?in?json){ //獲取屬性值 var?icur=0; if?(attr?==?'opacity')?{ icur?=Math.round(parseFloat(getStyle(obj,attr))*100); }else{ icur=parseInt(getStyle(obj,attr)); } //設置速度 var?speed=(json[attr]-icur)/10; var?speed=speed>0?Math.ceil(speed):Math.floor(speed); //?判斷停止 if(icur?!=?json[attr]){ flag=false; } if?(attr?==?'opacity')?{ obj.style.filter='alpha(opacity:'+(icur+speed)+')';//icur原始值+變化值speed obj.style.opacity=(icur+speed)/100; }else{ obj.style[attr]=icur+speed+"px"; console.log(obj.style[attr]); } if(flag){ clearInterval(obj.timer); //?回調函數 if(fn)?{ fn(); } } } },30) } <!DOCTYPE?html> <html> <head> <meta?charset="UTF-8"> <title>MoveModel</title> <link?rel="stylesheet"?type="text/css"?href="style/MoveModelCss.css"> </head> <body> <div?id="Box"></div> <div?id="Box2"></div> <div?id="Box3"></div> <script?src="js/MoveModelJs.js"></script> </body> </html>body{ margin:?0; padding:?0; } div{ height:?200px; width:?400px; background:?yellow; border:2px?solid?green; margin-bottom:?10px; filter:?alpha(opacity:30); opacity:?0.3; }
查看完整描述

6 回答

已采納
?
smartone

TA貢獻1條經驗 獲得超0個贊

把speed=(json[attr]-icur)/6;,

第67行的if(flag){}放在整個for in循環的外面.

已試,可以了

查看完整回答
反對 回復 2016-04-19
?
淡淡的月餅

TA貢獻8條經驗 獲得超0個贊

opacity和width中任意一個值達到了目標,就會停止運動。你把判斷改成當所有的值都到達了,才停止運動就行啦

查看完整回答
反對 回復 2016-04-19
?
fengxxc

TA貢獻1條經驗 獲得超0個贊


第55行,把var去掉;

第67行的if(flag){}放在整個for in循環的外面.

查看完整回答
反對 回復 2016-04-18
  • 甫里
    甫里
    第55行,把var不去掉;好像沒有什么影響~ 第67行的if(flag){}放在整個for in循環的外面了以后
  • fengxxc
    fengxxc
    再試一下這個:第54行里的10改成其他數,只要不是10或者10的倍數就行,最好是大于0小于10的整數. ps:聲明多個相同名字的變量是不好的寫法.
?
qq_青棗工作室_0

TA貢獻446條經驗 獲得超754個贊

你的box2有兩個屬性opacity和width都在變化。而在width未達到800前,opacity就已經先達到了100值,進而判斷到停止了,即flag為true,?clearInterval(obj.timer);

你的speed值是整數,多個屬性同時變化時,會出現比較大的誤差,不能同時到達最終值。

查看完整回答
1 反對 回復 2016-04-18
?
甫里

TA貢獻10條經驗 獲得超3個贊

box1和box3都是可以正常的按照代碼來運行

查看完整回答
反對 回復 2016-04-18
  • 6 回答
  • 0 關注
  • 2131 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號