最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

JS實(shí)現(xiàn)勻速與減速緩慢運(yùn)動(dòng)的動(dòng)畫效果封裝示例

 更新時(shí)間:2018年08月27日 11:45:50   作者:心郎  
這篇文章主要介紹了JS實(shí)現(xiàn)勻速與減速緩慢運(yùn)動(dòng)的動(dòng)畫效果,結(jié)合實(shí)例形式分析了JavaScript封裝結(jié)合定時(shí)器的頁面元素動(dòng)態(tài)變換效果動(dòng)畫相關(guān)操作技巧,需要的朋友可以參考下

本文實(shí)例講述了JS實(shí)現(xiàn)勻速與減速緩慢運(yùn)動(dòng)的動(dòng)畫效果。分享給大家供大家參考,具體如下:

<!DOCTYPE html>
<html>
<head lang="en">
  <meta charset="UTF-8">
  <title>m.fzitv.net JS勻速/減速運(yùn)動(dòng)</title>
  <style>
    *{
      margin: 0;
      padding: 0;
    }
    .box1 {
      width: 100px;
      height: 100px;
      background-color: pink;
      margin-top: 10px;
      position: relative;
    }
    .box2 {
      width: 100px;
      height: 100px;
      background-color: red;
      margin-top: 10px;
      position: relative;
    }
  </style>
</head>
<body>
<button>勻速移動(dòng)</button>
<button>減速移動(dòng)</button>
<div class="box1" ></div>
<div class="box2" ></div>
<script>
  // 動(dòng)畫原理 = 盒子位置 + 步長。
  //   1.閃動(dòng)。 (瞬間到達(dá))
  //   2.勻速。 (每次走一樣距離)
  //   3.緩動(dòng)。 (開始特快越走越慢,步長越來越?。?
  //        (類似剎車,電梯停止,壓縮彈簧...)
  // 好處:
  //   1.有非常逼真的緩動(dòng)效果,實(shí)現(xiàn)的動(dòng)畫效果更細(xì)膩。
  //   2.如果不清除定時(shí)器,物體永遠(yuǎn)跟著目標(biāo)在移動(dòng)。
  var box1 = document.getElementsByClassName("box1")[0];
  var box2 = document.getElementsByClassName("box2")[0];
  var but1 = document.getElementsByTagName("button")[0];
  var but2 = document.getElementsByTagName("button")[1];
  console.log(box1.offsetLeft);
  but1.onclick = function () {
    animate1(box1,200);
  }
  but2.onclick = function () {
    animate2(box2,500);
  }
  //勻速動(dòng)畫
  function animate1(ele,target){
    //要用定時(shí)器,先清除定時(shí)器
    //一個(gè)盒子只能有一個(gè)定時(shí)器,這樣兒的話,不會(huì)和其他盒子出現(xiàn)定時(shí)器沖突
    //而定時(shí)器本身講成為盒子的一個(gè)屬性
    clearInterval(ele.timer);
    //我們要求盒子既能向前又能向后,那么我們的步長就得有正有負(fù)
    //目標(biāo)值如果大于當(dāng)前值取正,目標(biāo)值如果小于當(dāng)前值取負(fù)
    var speed = target>ele.offsetLeft?3:-3;
    ele.timer = setInterval(function () {
      //在執(zhí)行之前就獲取當(dāng)前值和目標(biāo)值之差
      var val = target - ele.offsetLeft;
      ele.style.left = ele.offsetLeft + speed + "px";
      //目標(biāo)值和當(dāng)前值只差如果小于步長,那么就不能在前進(jìn)了
      //因?yàn)椴介L有正有負(fù),所有轉(zhuǎn)換成絕對(duì)值來比較
      if(Math.abs(val)<=Math.abs(speed)){
        ele.style.left = target + "px";
        clearInterval(ele.timer);
      }
    },30)
  }
  //緩動(dòng)動(dòng)畫封裝
  function animate2(ele,target) {
    clearInterval(ele.timer); //清楚歷史定時(shí)器
    ele.timer = setInterval(function () {
      //獲取步長 確定移動(dòng)方向(正負(fù)值) 步長應(yīng)該是越來越小的,緩動(dòng)的算法。
      var step = (target-ele.offsetLeft)/10;
      //對(duì)步長進(jìn)行二次加工(大于0向上取整,小于0項(xiàng)下取整)
      step = step>0?Math.ceil(step):Math.floor(step);
      //動(dòng)畫原理: 目標(biāo)位置 = 當(dāng)前位置 + 步長
      console.log(step);
      ele.style.left = ele.offsetLeft + step + "px";
      //檢測緩動(dòng)動(dòng)畫有沒有停止
      if(Math.abs(target-ele.offsetLeft)<=Math.abs(step)){
        ele.style.left = target + "px"; //直接移動(dòng)指定位置
        clearInterval(ele.timer);
      }
    },30);
  }
</script>
</body>
</html>

這里使用在線HTML/CSS/JavaScript代碼運(yùn)行工具http://tools.jb51.net/code/HtmlJsRun,可得到如下運(yùn)行效果:

更多關(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)文章

最新評(píng)論

鄂州市| 江川县| 辰溪县| 克什克腾旗| 璧山县| 仁寿县| 竹北市| 郑州市| 肃北| 海兴县| 龙南县| 玛沁县| 台前县| 舞阳县| 鄂温| 浮梁县| 康乐县| 班玛县| 巴楚县| 灵台县| 库尔勒市| 稷山县| 通河县| 土默特右旗| 石嘴山市| 麻栗坡县| 灵武市| 柞水县| 波密县| 郸城县| 方正县| 江达县| 冷水江市| 老河口市| 东海县| 通河县| 甘德县| 岳阳县| 营口市| 贵阳市| 金山区|