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

原生js實現jquery函數animate()動畫效果的簡單實例

 更新時間:2016年08月21日 13:54:15   投稿:jingxian  
下面小編就為大家?guī)硪黄鷍s實現jquery函數animate()動畫效果的簡單實例。小編覺得挺不錯的,現在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧

通過在公司一個月的實習,慢慢的對css跟html算是比較熟悉了,這幾天開始研究js,今天用js寫了一個jquery的animate函數,測試了下,性能還可以。個人覺得jquery并不是萬能的,因為是個框架,所以有些東西寫的比較死,就像animate函數一樣,可選的參數不多有時候可能并不能實現我們想要的效果。   

注釋的部分是用來測試用的,寫代碼的過程并不是十分順利,因為用js平時用的不是很細,都是大體知道方法,也用過,但等到真正要實現動畫函數的時候,細枝末節(jié)寫錯了就可能把人難住了。

函數里面有幾個參數解釋一下,

•obj, 函數的對象

•json, 數值對,形式{attr:”value”, attr: “value”},在這里是指要動畫對象的運動屬性

•interval, 每執(zhí)行一次改變的間隔,這里改變的是對象是屬性值

•sp, 值變換的速度,使動畫具有緩沖效果,而不只是勻速不變(sp為1)的

•fn, 回調函數,執(zhí)行完動畫之后的行為

代碼比較簡單,只是有幾個細節(jié)需要注意,在這里提醒一下:

•對象的屬性不必直接聲明,所以函數的第一句clearInterval(obj.timer);并不會報錯。

•必須為每一個對象分別添加一個定時器,否則互相會影響,一個定時器公用的結果是定時器的多個對象運動出現卡頓。

•son數據格式了解一下,當遍歷對象的動畫屬性的時候,需要icur != json[arr]判斷是否每一個屬性已經達到目標值。flag的作用是防止當其中某個屬性第一個達到目標值后,clearInterval(obj.timer)清除了定時器,結果其他動畫屬性并沒有達到目標值。所以在每次遍歷的時候初始化flag值為true,只要遇到一個沒有達到目標屬性的對象,就將flag置為false,直至對象的所有屬性達到目標值,清除定時器。

•speed = speed > 0 ? Math.ceil(speed): Math.floor(speed);

這一句的作用是將屬性值取整,因為屬性值除了opacity沒有小數。

•最后調用的時候注意動畫的對象,在使用for循環(huán)的時候不能隨意使用arr[i]形式,尤其是嵌套循環(huán)的時候i的值已經變成了最大值。

js

function animate(obj, json, interval, sp, fn) {
  clearInterval(obj.timer);
  //var k = 0;
  //var j = 0;
  function getStyle(obj, arr) {
    if(obj.currentStyle){
      return obj.currentStyle[arr];  //針對ie
    } else {
      return document.defaultView.getComputedStyle(obj, null)[arr]; 
    }
  }
  obj.timer = setInterval(function(){
    //j ++;
    var flag = true;
    for(var arr in json) {
      var icur = 0;
      //k++;
      if(arr == "opacity") {
        icur = Math.round(parseFloat(getStyle(obj, arr))*100);
      } else {
        icur = parseInt(getStyle(obj, arr));
      }
      var speed = (json[arr] - icur) * sp;
      speed = speed > 0 ? Math.ceil(speed): Math.floor(speed);
      if(icur != json[arr]){
        flag = false;
      } 
      if(arr == "opacity"){
        obj.style.filter = "alpha(opacity : '+(icur + speed)+' )";
        obj.style.opacity = (icur + speed)/100;
      }else {
        obj.style[arr] = icur + speed + "px";
      }
      //console.log(j + "," + arr +":"+ flag);
    }

    if(flag){
      clearInterval(obj.timer);
      //console.log(j + ":" + flag); 
      //console.log("k = " + k);
      //console.log("j = " + j);
      //console.log("DONE");
      if(fn){
        fn();
      }
    }
  },interval);
}

調用方式:

<script>
  var move = document.getElementById("move").getElementsByTagName("li");
  for(var i = 0; i < move.length; i ++){
    move[i].onmouseover = function(){
      var _this = this;
      animate(_this, {width: 500, height: 200},10, 0.01, function(){
        animate(_this, {width: 300, height: 200},10, 0.01);
      });

    }
  }

</script>

以上這篇原生js實現jquery函數animate()動畫效果的簡單實例就是小編分享給大家的全部內容了,希望能給大家一個參考,也希望大家多多支持腳本之家。

相關文章

  • 不使用中間變量,交換int型的 a, b兩個變量的值。

    不使用中間變量,交換int型的 a, b兩個變量的值。

    群中的題目,不過這樣大眾臉的題想必大家都見過,就看能玩出什么新花招
    2010-10-10
  • javascript圓盤抽獎程序實現原理和完整代碼例子

    javascript圓盤抽獎程序實現原理和完整代碼例子

    這篇文章主要介紹了javascript圓盤抽獎程序實現原理和完整代碼例子,需要的朋友可以參考下
    2014-06-06
  • 簡單的前端js+ajax 購物車框架(入門篇)

    簡單的前端js+ajax 購物車框架(入門篇)

    其實,一直想把自己寫的一些js給總結下,也許是能力有限不能把它完美結合起來。只能自己默默的看著哪些代碼,無能為力
    2011-10-10
  • 利用JavaScript構建樹形圖的方法詳解

    利用JavaScript構建樹形圖的方法詳解

    ?樹形圖可視化廣泛用于分層數據分析。如果你沒有經驗還想創(chuàng)建一個,那將會有些復雜。下面是一個詳細教程,教你如何使用JavaScript創(chuàng)建交互式樹形圖
    2022-06-06
  • JS中Generator函數與async函數用法介紹

    JS中Generator函數與async函數用法介紹

    javascript中經常會用到異步編程,在ES6之后我們使用的?Generator函數、async函數、promise都是我們異步編程的一大助力,這里我們主要講解Generator、async函數,并且簡介他們之間的一些聯(lián)系,本篇文章會帶著一些簡易案例,方便大家理解使用
    2023-06-06
  • Layui點擊圖片彈框預覽的實現方法

    Layui點擊圖片彈框預覽的實現方法

    今天小編就為大家分享一篇Layui點擊圖片彈框預覽的實現方法,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2019-09-09
  • Javascript數組中push方法用法分析

    Javascript數組中push方法用法分析

    這篇文章主要介紹了Javascript數組中push方法用法,結合實例形式分析了javascript中push方法的原理、使用方法與相關注意事項,需要的朋友可以參考下
    2016-10-10
  • javascript input輸入框模糊提示功能的實現

    javascript input輸入框模糊提示功能的實現

    這篇文章主要介紹了javascript input輸入框模糊提示功能的實現的相關資料,希望通過本能幫助到大家,需要的朋友可以參考下
    2017-09-09
  • Echarts.js實現水滴球和海洋效果

    Echarts.js實現水滴球和海洋效果

    這篇文章介紹了Echarts.js實現水滴球和海洋效果的方法,文中通過示例代碼介紹的非常詳細。對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2022-04-04
  • JS?中的?Event?Loop?是什么你真的懂

    JS?中的?Event?Loop?是什么你真的懂

    Event Loop,簡單翻譯就是?事件循環(huán),是 JS 語言下實現運行時的一個機制,這篇文章主要介紹了JS?中的?Event?Loop?的基本知識,需要的朋友可以參考下
    2022-06-06

最新評論