国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > JavaScript > 正文

JS高級運動實例分析

2019-11-19 18:22:57
字體:
來源:轉載
供稿:網友

本文實例分析了JS高級運動。分享給大家供大家參考,具體如下:

一、鏈式運動框架

1.他需要一個回調函數,在運動停止時,開始下一次運動(執行函數)

多物體運動框架改為如下:

function startMove(obj,attr,iTarget,fn){...  if(iCur==iTarget){    clearInterval(obj.timer);    fn();  }...};

然后就可以用它,比如先變寬再變高最后變透明度

startMove(this,'width',300,function(){  startMove(this,'height',300,function(){    startMove(this,'opacity',100);  });});

二、完美運動框架

1.原本多物體運動框架的缺陷

比如要讓他寬度高度同時變300,這樣寫:

startMove(this,'width',300);startMove(this,'height',300);

問題:只有高度變300了(因為寬度準備運動時會開一個定時器,這個定時器還沒開始運動前,執行高度變化的運動,就把之前的定時器關了)

2.for in

for(i=0;i<=arr.length;i++)和for(i in arr)效果一樣

①什么時候用for什么時候用for...in呢?

數組:兩個都可以用   Json:只能用for...in(因為Json下標沒有規律,沒有length可言)

對數組而言for...in循環不靈活,因為for循環可以從1可以從2等等任意數字開始,而for...in一循環就全部

②for in小應用

function setStyle(obj,attr,value){  obj.style[attr]=value;};setStyle(oDiv,'width','300px');setStyle(oDiv,'height','300px');setStyle(oDiv,'background','green');

=====>

function setStyle(obj,json){  var attr='';  for(attr in json){    obj.style[attr]=json[attr];  }};setStyle(oDiv,{width:'300px',height:'300px',background:'green'});

③多物體運動框架改進

function startMove(obj,json,fn){  clearInterval(obj.timer);  obj.timer=setInterval(function(){    for(var attr in json){     if(attr=='opacity'){        var iCur=parseInt(parseFloat(getStyle(obj,attr))*100);      }      else{        var iCur=parseInt(getStyle(obj,attr));      }      var iSpeed=(json[attr]-iCur)/8;      iSpeed=iSpeed>0?Math.ceil(iSpeed):Math.floor(iSpeed);      if(iCur==json[attr]){        clearInterval(obj.timer);        if(fn){         fn();  //有傳函數這個參數才執行,不然會出錯        }      }      else{        if(attr=='opacity'){          obj.style.filter='alpha(opacity:'+(iCur+iSpeed)+')';          obj.style.opacity=(iCur+iSpeed)/100;        }        else{          obj.style[attr]=iCur+iSpeed+'px'        }      }    }  },30);};

這樣還有個問題

if(iCur==json[attr]){  clearInterval(obj.timer);}

只要json里有任一值到達目標,計時器就停止

比如我讓寬度變到103,高度變到300,那高度到不了300就停止了

解決方案

function startMove(obj,json,fn){  clearInterval(obj.timer);  obj.timer=setInterval(function(){    var bStop=true;  //先定義一個值,假設所有值都到了    for(var attr in json){     if(attr=='opacity'){        var iCur=parseInt(parseFloat(getStyle(obj,attr))*100);      }      else{        var iCur=parseInt(getStyle(obj,attr));      }      var iSpeed=(json[attr]-iCur)/8;      iSpeed=iSpeed>0?Math.ceil(iSpeed):Math.floor(iSpeed);      if(iCur!=json[attr]){        bStop=false;    //并不是所有值都到了,就把bStop設成 false      }      if(attr=='opacity'){        obj.style.filter='alpha(opacity:'+(iCur+iSpeed)+')';        obj.style.opacity=(iCur+iSpeed)/100;      }      else{        obj.style[attr]=iCur+iSpeed+'px'      }    }    if(bStop){    //所有值都到了,關閉定時器      clearInterval(obj.timer);      if(fn){        fn();  //有傳函數這個參數才執行,不然會出錯      }    }  },30);};

更多關于JavaScript相關內容感興趣的讀者可查看本站專題:《JavaScript運動效果與技巧匯總》、《JavaScript切換特效與技巧總結》、《JavaScript查找算法技巧總結》、《JavaScript動畫特效與技巧匯總》、《JavaScript錯誤與調試技巧總結》、《JavaScript數據結構與算法技巧總結》、《JavaScript遍歷算法與技巧總結》及《JavaScript數學運算用法總結

希望本文所述對大家JavaScript程序設計有所幫助。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 含山县| 绥芬河市| 临安市| 驻马店市| 红安县| 甘洛县| 泸定县| 凉山| 宜章县| 临高县| 昭通市| 教育| 清镇市| 平昌县| 土默特左旗| 颍上县| 铁岭市| 平谷区| 固始县| 唐河县| 绥芬河市| 广河县| 大石桥市| 夏津县| 泰安市| 东丽区| 卢氏县| 乐平市| 蒙山县| 克拉玛依市| 河南省| 曲阳县| 科技| 马尔康县| 慈利县| 河西区| 兴仁县| 淮北市| 新宁县| 密山市| 南乐县|