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

首頁 > 編程 > JavaScript > 正文

JavaScript運動框架 鏈式運動到完美運動(五)

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

基于前幾篇的運動框架基礎,本文主要講解一下鏈式運動,就是運動完后接著再運動,比如很多網站中,一個方框的出現和退出:出現時先變寬再變高,退出時先變矮再變窄退出!
之前的模型是:

startMove(obj, json);

現在改為:

startMove(obj, json, fn);

也就是在第一次運動結束的時候執行fn(); fn是傳過來的一個參數,這個參數是個函數,定時器清理之后手動運行fn();如果想采用鏈式運動,那就是在fn中再調用startMove(obj, json, fn),再在里面的fn中調用startMove(obj, json, fn),可以一直玩下去

<!DOCTYPE html><html><head>  <meta charset="utf-8">  <title>運動框架(五):鏈式運動到完美運動</title>  <style type="text/css">    div {      width: 100px;      height: 100px;      background: orange;      margin: 10px;      float: left;    }  </style></head><body>  <div id="div1"></div>  <script type="text/javascript">    var oDiv = document.getElementById('div1');    oDiv.onmouseover = function() {      startMove(oDiv, {width:300,opacity:30}, function() {        startMove(oDiv, {height:500});      });    };    oDiv.onmouseout = function() {      startMove(oDiv, {height:100}, function() {        startMove(oDiv, {width:100,opacity:100});      })    };    function getStyle(obj, attr) {      if (obj.currentStyle) {        return obj.currentStyle[attr];      } else {        return getComputedStyle(obj, null)[attr];      }    }    function startMove(obj, json, fn) {      clearInterval(obj.timer);      obj.timer = setInterval(function() {        var bStop = true;        for (var attr in json) {          var cur = 0;          if (attr === 'opacity') {            cur = Math.round(parseFloat(getStyle(obj, attr)) * 100);          } else {            cur = parseInt(getStyle(obj, attr));          }          if (cur != json[attr]) {            bStop = false;          }          var speed = (json[attr] - cur)/10;          speed = speed > 0 ? Math.ceil(speed) : Math.floor(speed);          cur += speed;          if (attr === 'opacity') {            obj.style.filter = 'alpha(opacity:' + cur + ')';            obj.style.opacity = cur/100;          } else {            obj.style[attr] = cur + 'px';          }        }        if (bStop) {          clearInterval(obj.timer);          if (fn) fn();        }      }, 30);    }  </script></body></html>

最后提取出來的完美運動框架如下,motionFrame.js:

function getStyle(obj, attr) {  if (obj.currentStyle) {    return obj.currentStyle[attr];  } else {    return getComputedStyle(obj, null)[attr];  }}function startMove(obj, json, fn) {  clearInterval(obj.timer);  obj.timer = setInterval(function() {    var bStop = true;    for (var attr in json) {      var cur = 0;      if (attr === 'opacity') {        cur = Math.round(parseFloat(getStyle(obj, attr)) * 100);      } else {        cur = parseInt(getStyle(obj, attr));      }      if (cur != json[attr]) {        bStop = false;      }      var speed = (json[attr] - cur)/10;      speed = speed > 0 ? Math.ceil(speed) : Math.floor(speed);      cur += speed;      if (attr === 'opacity') {        obj.style.filter = 'alpha(opacity:' + cur + ')';        obj.style.opacity = cur/100;      } else {        obj.style[attr] = cur + 'px';      }    }    if (bStop) {      clearInterval(obj.timer);      if (fn) fn();    }  }, 30);}

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持武林網。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 商丘市| 宜城市| 大安市| 福清市| 太保市| 高碑店市| 克什克腾旗| 怀远县| 郯城县| 定边县| 武功县| 蓬安县| 武功县| 抚宁县| 静乐县| 万源市| 四子王旗| 游戏| 五常市| 乌拉特后旗| 三明市| 上林县| 藁城市| 积石山| 东兴市| 淮南市| 龙泉市| 池州市| 宜阳县| 桓台县| 新民市| 陇川县| 揭西县| 松江区| 固原市| 沛县| 辽中县| 土默特左旗| 云阳县| 上饶县| 祁阳县|