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

實現(xiàn)動畫效果核心方式的js代碼

 更新時間:2013年09月27日 15:39:52   作者:  
為了做好導(dǎo)航菜單,有時候需要在菜單下拉的時候?qū)崿F(xiàn)動畫效果,所以這幾天就研究了研究如何用js實現(xiàn)動畫效果,實現(xiàn)動畫核心要用到兩個函數(shù),一個是setTimeOut,另一個是setInterval
下邊我就簡單說一下過程和原理。
第一步:實現(xiàn)一個匿名函數(shù)并能自己執(zhí)行。
復(fù)制代碼 代碼如下:

(function(){ })()

 這個函數(shù)在一樣編的好的JS代碼中經(jīng)常會見到,起到閉包,自動執(zhí)行的效果,在函數(shù)后加一對()表示自動執(zhí)行,前邊的匿名函數(shù)需要用()包起來,這樣才能為宿主(我們的BOM環(huán)境)理解,里面的function(){}這就是個匿名函數(shù)。
第二步:實現(xiàn)動畫,以改變一個box的秀明度來說明。
id為animation的div
復(fù)制代碼 代碼如下:

<div id="animation"></div>

 要實現(xiàn)animation的透明漸變,需要不斷改變其透明度opacity,我們這樣實現(xiàn)
復(fù)制代碼 代碼如下:

for(var i=0;i<10;i++){
    setTimeout((function(pos){
        return function(){
            someAnimation(pos);
        }
    })(i/10),i*100)
}

下面我們來解釋一下這段代碼,這段代碼比較復(fù)雜和難于理解,所以剛開始不明白也沒事,慢慢就懂了,首先解釋一下setTimeout在此處的用法
復(fù)制代碼 代碼如下:

setTimeout((function(){})(i/10),i*100)

 setTimeout第一個參數(shù)為要執(zhí)行的函數(shù),第二個參數(shù)為時間參數(shù),意為多久后開始執(zhí)行
而js沒有塊的概念,作用域范圍是以函數(shù)為準(zhǔn)的,所以我們這里使用的閉包,實現(xiàn)原理如下:
復(fù)制代碼 代碼如下:

(function(){
  return function(){}
})()

 這校才可以執(zhí)行for循環(huán),達(dá)到我們想要的結(jié)果,如果我們不使用閉包,代碼會如下:
復(fù)制代碼 代碼如下:

for(var i=0;i<10;i++){
  setTimeout(function(pos){
    someAnimation(pos);
  }(i/10),i*100)
}

這樣的for循環(huán)只會執(zhí)行一次,即i=9時,感興趣的同學(xué)可以自己試試
到目前為止,整個代碼是這個樣子滴
復(fù)制代碼 代碼如下:

(function(){
            function someAnimation(args){
                document.getElementById("animation").style.opacity=args;
            }
            for(var i=0;i<10;i++){
                    setTimeout((function(pos){
                        return function(){
                            someAnimation(pos);
                        }
                    })(i/10),i*100)
            }
})()

 這樣實現(xiàn)了id為animation的box透明度從0到1的一次變化。
第三步,實現(xiàn)不停地變化,我們用setInterval來實現(xiàn)
setInterval也是兩個參數(shù),第一個是要執(zhí)行的函數(shù),第二個是執(zhí)行間隔時間
至此代碼如下:
復(fù)制代碼 代碼如下:

(function(){
            function someAnimation(args){
                document.getElementById("animation").style.opacity=args;
            }
            setInterval(function(){
                for(var i=0;i<10;i++){
                    setTimeout((function(pos){
                        return function(){
                            someAnimation(pos);
                        }
                    })(i/10),i*100)
                }
            },2000);
        })()

下次我會實現(xiàn)這個代碼的面向?qū)ο蠡O(shè)計和出一些具體的實現(xiàn)方案,方便學(xué)習(xí)使用。
全部代碼如下
復(fù)制代碼 代碼如下:

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en">
<head>
    <meta http-equiv="Content-Type" content="text/html;charset=UTF-8" />
    <title></title>
    <style type="text/css">
        #animation{width:500px;height:350px;background-color:red;}
    </style>
</head>
<body>
    <div id="animation">
    </div>
    <script type="text/javascript">
        (function(){
            function someAnimation(args){
                document.getElementById("animation").style.opacity=args;
            }
            setInterval(function(){
                for(var i=0;i<10;i++){
                    setTimeout((function(pos){
                        return function(){
                            someAnimation(pos);
                        }
                    })(i/10),i*100)
                }
            },2000);
        })()
    </script>
</body>
</html>

相關(guān)文章

  • 基于css3新屬性transform及原生js實現(xiàn)鼠標(biāo)拖動3d立方體旋轉(zhuǎn)

    基于css3新屬性transform及原生js實現(xiàn)鼠標(biāo)拖動3d立方體旋轉(zhuǎn)

    這篇文章主要介紹了基于css3新屬性transform及原生js實現(xiàn)鼠標(biāo)拖動3d立方體旋轉(zhuǎn) 的相關(guān)資料,需要的朋友可以參考下
    2016-06-06
  • JS打開新窗口防止被瀏覽器阻止的方法

    JS打開新窗口防止被瀏覽器阻止的方法

    這篇文章主要介紹了JS打開新窗口防止被瀏覽器阻止的方法,分析對比了常用方法與改進(jìn)方法,是非常實用的技巧,需要的朋友可以參考下
    2015-01-01
  • javascript獲取本機操作系統(tǒng)類型的方法

    javascript獲取本機操作系統(tǒng)類型的方法

    關(guān)于我們使用電腦的操作系統(tǒng),我們通過鼠標(biāo)點擊就能獲取,如果我們想用腳本怎么實現(xiàn)javascript獲取本機操作系統(tǒng)類型的方法呢,下面給大家分享javascript獲取本機操作系統(tǒng)類型的方法,需要的朋友可以參考下
    2015-08-08
  • lhgcalendar時間插件限制只能選擇三個月的實現(xiàn)方法

    lhgcalendar時間插件限制只能選擇三個月的實現(xiàn)方法

    下面小編就為大家?guī)硪黄猯hgcalendar時間插件限制只能選擇三個月的實現(xiàn)方法。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2017-07-07
  • 基于JavaScript+HTML5 實現(xiàn)打地鼠小游戲邏輯流程圖文詳解(附完整代碼)

    基于JavaScript+HTML5 實現(xiàn)打地鼠小游戲邏輯流程圖文詳解(附完整代碼)

    打地鼠小游戲大家都喜歡玩,本文是以html編寫的,并且使用HBulider軟件進(jìn)行編寫的,下面通過本文給大家分享基于JavaScript+HTML5 實現(xiàn)打地鼠小游戲邏輯流程圖文詳解,需要的朋友參考下吧
    2017-11-11
  • 微信小程序 彈窗自定義實例代碼

    微信小程序 彈窗自定義實例代碼

    這篇文章主要介紹了微信小程序 彈窗自定義實例代碼的相關(guān)資料,有時候做開發(fā)項目的時候需要根據(jù)客戶需求更改原系統(tǒng)的組件,這里就對小程序中彈窗進(jìn)行更改,需要的朋友可以參考下
    2017-03-03
  • 基于Typescript與Axios的接口請求管理詳解

    基于Typescript與Axios的接口請求管理詳解

    接口是一系列抽象方法的聲明,是一些方法特征的集合,這些方法都應(yīng)該是抽象的,需要由具體的類去實現(xiàn),然后第三方就可以通過這組抽象方法調(diào)用,讓具體的類執(zhí)行具體的方法,這篇文章主要給大家介紹了基于Typescript與Axios的接口請求管理的相關(guān)資料,需要的朋友可以參考下
    2021-09-09
  • GOJS+VUE實現(xiàn)流程圖效果

    GOJS+VUE實現(xiàn)流程圖效果

    這篇文章主要為大家詳細(xì)介紹了GOJS+VUE實現(xiàn)流程圖效果,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2018-12-12
  • 詳解springmvc 接收json對象的兩種方式

    詳解springmvc 接收json對象的兩種方式

    本篇文章主要介紹了springmvc 接收json對象的兩種方式,具有一定的參考價值,有需要的可以了解一下。
    2016-12-12
  • JavaScript庫之vanilla-tilt使用教程(一個平滑的3D傾斜庫)

    JavaScript庫之vanilla-tilt使用教程(一個平滑的3D傾斜庫)

    vanilla-tilt.js是Javascript中一個平滑的3D傾斜庫,可以讓網(wǎng)頁的一些控件變得動態(tài)起來,下面這篇文章主要給大家介紹了關(guān)于JavaScript庫之vanilla-tilt使用的相關(guān)資料,需要的朋友可以參考下
    2023-02-02

最新評論