前面我們都是用定時(shí)器實(shí)現(xiàn)單物體運(yùn)動(dòng),在項(xiàng)目中我們往往不是做單物體運(yùn)動(dòng),而是做多物體多個(gè)值變化。
這里我們將通過改變參數(shù)實(shí)現(xiàn)多物體、任意值的運(yùn)動(dòng)。一個(gè)運(yùn)動(dòng)框架,可以改變物體的寬度、高度、邊框、字體大小、透明度等等。
注意:上面章節(jié)中,我們都是用offsetWidth(offsetWidth包含邊框和padding等)等設(shè)置、獲取樣式,因?yàn)槭褂梅绞胶唵?,但是如果物體包含border和padding等樣式的時(shí)候,就會(huì)報(bào)錯(cuò),所以這里我們用更加嚴(yán)謹(jǐn)?shù)姆绞絚urrentStyle和getComputedStyle來獲取樣式。
注意:在電腦中我們并不能真正的存儲(chǔ)一些具體的數(shù)值,我們存儲(chǔ)的是一些近似值,比如0.07*100,最終結(jié)果并不是7,所以在下面我們會(huì)四舍五入轉(zhuǎn)換為整數(shù)。
注意注意:在多物體運(yùn)動(dòng)時(shí),定時(shí)器和一些參數(shù)一定不要共用,否則會(huì)到這這個(gè)運(yùn)動(dòng)沒有完成就被清除然后觸發(fā)了其他運(yùn)動(dòng),一些參數(shù)也不可以共用,會(huì)導(dǎo)致一些參數(shù)沒有達(dá)到固定值就被重新操作。所以,下例中的定時(shí)器都是放在元素上。
<!DOCTYPE html> <html> <head> <title>運(yùn)動(dòng)改變寬度、高度、邊框、字體、透明度</title> <style> div { width: 200px; height: 200px; background: red; margin: 10px; float: left; border:1px solid #000; font-size:14px; } div:nth-child(5) { filter: alpha(opacity:30); opacity:0.3; } </style> <script> window.onload = function() { var oDiv1 = document.getElementById("div1"); var oDiv2 = document.getElementById("div2"); var oDiv3 = document.getElementById("div3"); var oDiv4 = document.getElementById("div4"); var oDiv5 = document.getElementById("div5"); oDiv1.onmouseover=function(){ startMove(this,"height", 400) } oDiv1.onmouseout=function(){ startMove(this,"height", 200) } oDiv2.onmouseover=function(){ startMove(this,"width", 400) } oDiv2.onmouseout=function(){ startMove(this, "width",200) } oDiv3.onmouseover=function(){ startMove(this,"fontSize", 50) } oDiv3.onmouseout=function(){ startMove(this, "fontSize",14) } oDiv4.onmouseover=function(){ startMove(this,"borderWidth", 100) } oDiv4.onmouseout=function(){ startMove(this, "borderWidth",1) } oDiv5.onmouseover=function(){ startMove(this,"opacity", 100) } oDiv5.onmouseout=function(){ startMove(this, "opacity",30) } } function getStyle(obj,name){ if(obj.currentStyle){ return obj.currentStyle[name]; } else{ return getComputedStyle(obj,false)[name]; } } function startMove(obj, attr, iTarget) { clearInterval(obj.timer); obj.timer = setInterval(function() { var cur=0; if(attr==="opacity"){ cur=Math.round(parseFloat(getStyle(obj,attr))*100);//有可能會(huì)出現(xiàn)誤差0.07*100 } else{ cur=parseInt(getStyle(obj,attr)); } var speed = (iTarget - cur) / 6; speed = speed > 0 ? Math.ceil(speed) : Math.floor(speed); if (cur === iTarget) { clearInterval(obj.timer); } else { if(attr==="opacity"){ obj.style.filter="alpha(opacity:"+cur+speed+")"; obj.style.opacity=(cur+speed)/100; }else{ obj.style[attr]=cur+speed+"px"; } } }, 30) } </script> </head> <body> <div id="div1">變寬</div> <div id="div2">變高</div> <div id="div3">文字變大</div> <div id="div4">borderwidth</div> <div id="div5">透明度</div> </body> </html>
聲明:本網(wǎng)頁內(nèi)容旨在傳播知識(shí),若有侵權(quán)等問題請(qǐng)及時(shí)與本網(wǎng)聯(lián)系,我們將在第一時(shí)間刪除處理。TEL:177 7030 7066 E-MAIL:11247931@qq.com