欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

JS高級(jí)運(yùn)動(dòng)實(shí)例分析

 更新時(shí)間:2016年12月20日 10:50:52   作者:鬼畜十三  
這篇文章主要介紹了JS高級(jí)運(yùn)動(dòng),結(jié)合實(shí)例形式分析了javascript運(yùn)動(dòng)框架原理、實(shí)現(xiàn)與應(yīng)用技巧,需要的朋友可以參考下

本文實(shí)例分析了JS高級(jí)運(yùn)動(dòng)。分享給大家供大家參考,具體如下:

一、鏈?zhǔn)竭\(yùn)動(dòng)框架

1.他需要一個(gè)回調(diào)函數(shù),在運(yùn)動(dòng)停止時(shí),開始下一次運(yùn)動(dòng)(執(zhí)行函數(shù))

多物體運(yùn)動(dòng)框架改為如下:

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);
  });
});

二、完美運(yùn)動(dòng)框架

1.原本多物體運(yùn)動(dòng)框架的缺陷

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

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

問題:只有高度變300了(因?yàn)閷挾葴?zhǔn)備運(yùn)動(dòng)時(shí)會(huì)開一個(gè)定時(shí)器,這個(gè)定時(shí)器還沒開始運(yùn)動(dòng)前,執(zhí)行高度變化的運(yùn)動(dòng),就把之前的定時(shí)器關(guān)了)

2.for in

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

①什么時(shí)候用for什么時(shí)候用for...in呢?

數(shù)組:兩個(gè)都可以用   Json:只能用for...in(因?yàn)镴son下標(biāo)沒有規(guī)律,沒有l(wèi)ength可言)

對(duì)數(shù)組而言for...in循環(huán)不靈活,因?yàn)閒or循環(huán)可以從1可以從2等等任意數(shù)字開始,而for...in一循環(huán)就全部

②for in小應(yīng)用

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'});

③多物體運(yùn)動(dòng)框架改進(jìn)

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();  //有傳函數(shù)這個(gè)參數(shù)才執(zhí)行,不然會(huì)出錯(cuò)
        }
      }
      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);
};

這樣還有個(gè)問題

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

只要json里有任一值到達(dá)目標(biāo),計(jì)時(shí)器就停止

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

解決方案

function startMove(obj,json,fn){
  clearInterval(obj.timer);
  obj.timer=setInterval(function(){
    var bStop=true;  //先定義一個(gè)值,假設(shè)所有值都到了
    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設(shè)成 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){    //所有值都到了,關(guān)閉定時(shí)器
      clearInterval(obj.timer);
      if(fn){
        fn();  //有傳函數(shù)這個(gè)參數(shù)才執(zhí)行,不然會(huì)出錯(cuò)
      }
    }
  },30);
};

更多關(guān)于JavaScript相關(guān)內(nèi)容感興趣的讀者可查看本站專題:《JavaScript運(yùn)動(dòng)效果與技巧匯總》、《JavaScript切換特效與技巧總結(jié)》、《JavaScript查找算法技巧總結(jié)》、《JavaScript動(dòng)畫特效與技巧匯總》、《JavaScript錯(cuò)誤與調(diào)試技巧總結(jié)》、《JavaScript數(shù)據(jù)結(jié)構(gòu)與算法技巧總結(jié)》、《JavaScript遍歷算法與技巧總結(jié)》及《JavaScript數(shù)學(xué)運(yùn)算用法總結(jié)

希望本文所述對(duì)大家JavaScript程序設(shè)計(jì)有所幫助。

相關(guān)文章

  • JS如何實(shí)現(xiàn)基于websocket的多端橋接平臺(tái)

    JS如何實(shí)現(xiàn)基于websocket的多端橋接平臺(tái)

    我們?cè)谡{(diào)試過程使用的工具有:modheader,postman等,但這些工具都會(huì)存在的問題:缺少客戶端里相應(yīng)的設(shè)備信息;即使將cookie信息復(fù)制出來,也是存在過期的問題;多個(gè)設(shè)備之間切換時(shí)不方便;針對(duì)這些存在的問題,我基于websocket雙向通信的特點(diǎn),實(shí)現(xiàn)了多端橋接管理平臺(tái)
    2021-05-05
  • 微信小程序?qū)崿F(xiàn)時(shí)間預(yù)約功能

    微信小程序?qū)崿F(xiàn)時(shí)間預(yù)約功能

    這篇文章主要為大家詳細(xì)介紹了微信小程序?qū)崿F(xiàn)時(shí)間預(yù)約基本功能,一個(gè)類似電商的時(shí)間預(yù)約功能,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2018-11-11
  • json中換行符的處理方法示例介紹

    json中換行符的處理方法示例介紹

    json經(jīng)常使用,但如果字段中出現(xiàn)換行符如何處理,測(cè)試一下json類的處理,也沒有發(fā)現(xiàn)。想不到最終的處理確實(shí)如此簡(jiǎn)單
    2014-06-06
  • 一篇文章深入了解JavaScript中的fetch方法

    一篇文章深入了解JavaScript中的fetch方法

    這篇文章主要給大家介紹了關(guān)于JavaScript中fetch方法的相關(guān)資料,JavaScript中的fetch()方法用于向服務(wù)器請(qǐng)求并加載網(wǎng)頁中的信息,請(qǐng)求可以是返回JSON或XML格式數(shù)據(jù)的任何API,需要的朋友可以參考下
    2023-10-10
  • JavaScript對(duì)象屬性操作實(shí)例解析

    JavaScript對(duì)象屬性操作實(shí)例解析

    這篇文章主要介紹了JavaScript對(duì)象屬性操作實(shí)例解析,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2020-02-02
  • Bootstrap表格制作代碼

    Bootstrap表格制作代碼

    這篇文章主要為大家詳細(xì)介紹了Bootstrap表格的制作代碼,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2017-03-03
  • JavaScript獲取時(shí)間戳的方法總結(jié)

    JavaScript獲取時(shí)間戳的方法總結(jié)

    JavaScript獲得時(shí)間戳的方法有五種,后四種都是通過實(shí)例化時(shí)間對(duì)象new Date() 來進(jìn)一步獲取當(dāng)前的時(shí)間戳,下面我們就一起學(xué)習(xí)一下具體獲取的方法吧
    2023-09-09
  • 用js實(shí)現(xiàn)的仿sohu博客更換頁面風(fēng)格(簡(jiǎn)單版)

    用js實(shí)現(xiàn)的仿sohu博客更換頁面風(fēng)格(簡(jiǎn)單版)

    用js實(shí)現(xiàn)的仿sohu博客更換頁面風(fēng)格(簡(jiǎn)單版)...
    2007-03-03
  • 7個(gè)去偽存真的JavaScript面試題

    7個(gè)去偽存真的JavaScript面試題

    這篇文章主要為大家分享了7個(gè)去偽存真的JavaScript面試題,希望本文可以幫助大家比較順利的通過面試,感興趣的小伙伴們可以參考一下
    2016-01-01
  • JS 數(shù)組 移除 實(shí)現(xiàn)代碼

    JS 數(shù)組 移除 實(shí)現(xiàn)代碼

    可以移除數(shù)組中的值函數(shù) ,用來取出數(shù)組中的一些值,間接的修改了數(shù)組值。
    2009-07-07

最新評(píng)論