JavaScript 建立運動架構的實現代碼

來源:互聯網
上載者:User

封裝好的運動架構Move(obj,attr,iTarget),可直接調用:

可用於設定width、border、fontSize、marginLeft、opacity等許多常見屬性值的變速變化,實現各種有趣效果。

相容IE和FF。

複製代碼 代碼如下:/****************
*
* IE-BUG:
* 在IE中,設定opacity屬性時,元素樣式中需要設定opacity屬性,才能讀取到opacity值。
*
* obj:元素對象。 attr:用引號包圍的屬性名稱。 iTarget:屬性目標值。
*
*****************/

function Move(obj,attr,iTarget){
clearInterval(obj.timer);//關閉前一個定時器,解決對同個對象同時調用多個Move()時,定時器疊加問題。使用obj.timer給每個調用Move()的對象賦予各自的定時器,防止多個對象同時調用Move()時,同用一個定時器,而導致相關幹擾問題。
obj.timer=setInterval(function(){
var cur=0;//建立一個變數,用於儲存 attr屬性每時每刻的值
if(attr=="opacity"){
//針對在FF中opacity屬性值為浮點數值問題,將屬性值 四捨五入、轉換成浮點型。乘以100,使opacity屬性值與IE統一為百分數
cur=Math.round(parseFloat(getStyle(obj,attr))*100);
}else{
cur=parseInt(getStyle(obj,attr));//將除opacity外的屬性(width/fontSize/MarginLeft等)的初始值 轉換為整型
}
var speed=(iTarget-cur)/10;//建立 遞減的速度speed變數。實現屬性值的變速改變

speed=speed>0?Math.ceil(speed):Math.floor(speed);//取整,解決瀏覽器忽略小於1px的數值 導致運動結束時,離目標值Itarget少幾個像素的問題

if(iTarget==cur){//當目標值等於目標值時,結束定時器
clearInterval(obj.timer);
}else{
cur+=speed;//當前值cur 加上 遞減的速度值speed
if(attr=="opacity"){
// 分別對IE和FF設定opacity屬性值
obj.style.filter="alpha(opacity:"+cur+")"; //for IE
obj.style.opacity=cur/100; //for FF
}else{
obj.style[attr]=cur+"px"; //給指定屬性attr 添加值cur+speed
}
}
},30);
}
//getStyle()函數 用於相容IE和FF:擷取 對象的 非行間樣式中的屬性的值。 obj:元素對象。 name:屬性名稱。
function getStyle(obj,name){
if(obj.currentStyle){
return obj.currentStyle[name];//for IE
}else{
return getComputedStyle(obj,false)[name];//for FF
}
}

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.