實(shí)現(xiàn)動(dòng)畫(huà)效果核心方式的js代碼
更新時(shí)間:2013年09月27日 15:39:52 作者:
為了做好導(dǎo)航菜單,有時(shí)候需要在菜單下拉的時(shí)候?qū)崿F(xiàn)動(dòng)畫(huà)效果,所以這幾天就研究了研究如何用js實(shí)現(xiàn)動(dòng)畫(huà)效果,實(shí)現(xiàn)動(dòng)畫(huà)核心要用到兩個(gè)函數(shù),一個(gè)是setTimeOut,另一個(gè)是setInterval
下邊我就簡(jiǎn)單說(shuō)一下過(guò)程和原理。
第一步:實(shí)現(xiàn)一個(gè)匿名函數(shù)并能自己執(zhí)行。
(function(){ })()
這個(gè)函數(shù)在一樣編的好的JS代碼中經(jīng)常會(huì)見(jiàn)到,起到閉包,自動(dòng)執(zhí)行的效果,在函數(shù)后加一對(duì)()表示自動(dòng)執(zhí)行,前邊的匿名函數(shù)需要用()包起來(lái),這樣才能為宿主(我們的BOM環(huán)境)理解,里面的function(){}這就是個(gè)匿名函數(shù)。
第二步:實(shí)現(xiàn)動(dòng)畫(huà),以改變一個(gè)box的秀明度來(lái)說(shuō)明。
id為animation的div
<div id="animation"></div>
要實(shí)現(xiàn)animation的透明漸變,需要不斷改變其透明度opacity,我們這樣實(shí)現(xiàn)
for(var i=0;i<10;i++){
setTimeout((function(pos){
return function(){
someAnimation(pos);
}
})(i/10),i*100)
}
下面我們來(lái)解釋一下這段代碼,這段代碼比較復(fù)雜和難于理解,所以剛開(kāi)始不明白也沒(méi)事,慢慢就懂了,首先解釋一下setTimeout在此處的用法
setTimeout((function(){})(i/10),i*100)
setTimeout第一個(gè)參數(shù)為要執(zhí)行的函數(shù),第二個(gè)參數(shù)為時(shí)間參數(shù),意為多久后開(kāi)始執(zhí)行
而js沒(méi)有塊的概念,作用域范圍是以函數(shù)為準(zhǔn)的,所以我們這里使用的閉包,實(shí)現(xiàn)原理如下:
(function(){
return function(){}
})()
這校才可以執(zhí)行for循環(huán),達(dá)到我們想要的結(jié)果,如果我們不使用閉包,代碼會(huì)如下:
for(var i=0;i<10;i++){
setTimeout(function(pos){
someAnimation(pos);
}(i/10),i*100)
}
這樣的for循環(huán)只會(huì)執(zhí)行一次,即i=9時(shí),感興趣的同學(xué)可以自己試試
到目前為止,整個(gè)代碼是這個(gè)樣子滴
(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)
}
})()
這樣實(shí)現(xiàn)了id為animation的box透明度從0到1的一次變化。
第三步,實(shí)現(xiàn)不停地變化,我們用setInterval來(lái)實(shí)現(xiàn)
setInterval也是兩個(gè)參數(shù),第一個(gè)是要執(zhí)行的函數(shù),第二個(gè)是執(zhí)行間隔時(shí)間
至此代碼如下:
(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);
})()
下次我會(huì)實(shí)現(xiàn)這個(gè)代碼的面向?qū)ο蠡O(shè)計(jì)和出一些具體的實(shí)現(xiàn)方案,方便學(xué)習(xí)使用。
全部代碼如下
<!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>
第一步:實(shí)現(xiàn)一個(gè)匿名函數(shù)并能自己執(zhí)行。
復(fù)制代碼 代碼如下:
(function(){ })()
這個(gè)函數(shù)在一樣編的好的JS代碼中經(jīng)常會(huì)見(jiàn)到,起到閉包,自動(dòng)執(zhí)行的效果,在函數(shù)后加一對(duì)()表示自動(dòng)執(zhí)行,前邊的匿名函數(shù)需要用()包起來(lái),這樣才能為宿主(我們的BOM環(huán)境)理解,里面的function(){}這就是個(gè)匿名函數(shù)。
第二步:實(shí)現(xiàn)動(dòng)畫(huà),以改變一個(gè)box的秀明度來(lái)說(shuō)明。
id為animation的div
復(fù)制代碼 代碼如下:
<div id="animation"></div>
要實(shí)現(xiàn)animation的透明漸變,需要不斷改變其透明度opacity,我們這樣實(shí)現(xiàn)
復(fù)制代碼 代碼如下:
for(var i=0;i<10;i++){
setTimeout((function(pos){
return function(){
someAnimation(pos);
}
})(i/10),i*100)
}
下面我們來(lái)解釋一下這段代碼,這段代碼比較復(fù)雜和難于理解,所以剛開(kāi)始不明白也沒(méi)事,慢慢就懂了,首先解釋一下setTimeout在此處的用法
復(fù)制代碼 代碼如下:
setTimeout((function(){})(i/10),i*100)
setTimeout第一個(gè)參數(shù)為要執(zhí)行的函數(shù),第二個(gè)參數(shù)為時(shí)間參數(shù),意為多久后開(kāi)始執(zhí)行
而js沒(méi)有塊的概念,作用域范圍是以函數(shù)為準(zhǔn)的,所以我們這里使用的閉包,實(shí)現(xiàn)原理如下:
復(fù)制代碼 代碼如下:
(function(){
return function(){}
})()
這校才可以執(zhí)行for循環(huán),達(dá)到我們想要的結(jié)果,如果我們不使用閉包,代碼會(huì)如下:
復(fù)制代碼 代碼如下:
for(var i=0;i<10;i++){
setTimeout(function(pos){
someAnimation(pos);
}(i/10),i*100)
}
這樣的for循環(huán)只會(huì)執(zhí)行一次,即i=9時(shí),感興趣的同學(xué)可以自己試試
到目前為止,整個(gè)代碼是這個(gè)樣子滴
復(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)
}
})()
這樣實(shí)現(xiàn)了id為animation的box透明度從0到1的一次變化。
第三步,實(shí)現(xiàn)不停地變化,我們用setInterval來(lái)實(shí)現(xiàn)
setInterval也是兩個(gè)參數(shù),第一個(gè)是要執(zhí)行的函數(shù),第二個(gè)是執(zhí)行間隔時(shí)間
至此代碼如下:
復(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);
})()
下次我會(huì)實(shí)現(xiàn)這個(gè)代碼的面向?qū)ο蠡O(shè)計(jì)和出一些具體的實(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>
您可能感興趣的文章:
- 又一款js時(shí)鐘!transform實(shí)現(xiàn)時(shí)鐘效果
- 基于css3新屬性transform及原生js實(shí)現(xiàn)鼠標(biāo)拖動(dòng)3d立方體旋轉(zhuǎn)
- 淺談javascript獲取元素transform參數(shù)
- 用js實(shí)現(xiàn)的模擬jquery的animate自定義動(dòng)畫(huà)(2.5K)
- 圖片的左右移動(dòng),js動(dòng)畫(huà)效果實(shí)現(xiàn)代碼
- 九種原生js動(dòng)畫(huà)效果
- javascript判斷css3動(dòng)畫(huà)結(jié)束 css3動(dòng)畫(huà)結(jié)束的回調(diào)函數(shù)
- js動(dòng)畫(huà)(animate)簡(jiǎn)單引擎代碼示例
- JS判斷頁(yè)面加載狀態(tài)以及添加遮罩和緩沖動(dòng)畫(huà)的代碼
- JS實(shí)現(xiàn)超炫網(wǎng)頁(yè)煙花動(dòng)畫(huà)效果的方法
- javascript與css3動(dòng)畫(huà)結(jié)合使用小結(jié)
- js動(dòng)畫(huà)效果打開(kāi)層 關(guān)閉層
- JS實(shí)現(xiàn)動(dòng)畫(huà)兼容性的transition和transform實(shí)例分析
相關(guān)文章
分享js粘帖屏幕截圖到web頁(yè)面插件screenshot-paste
這篇文章主要為大家分享了js粘帖屏幕截圖到web頁(yè)面插件screenshot-paste的相關(guān)資料,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2016-03-03
基于js實(shí)現(xiàn)數(shù)組相鄰元素上移下移
這篇文章主要介紹了基于js實(shí)現(xiàn)數(shù)組相鄰元素上移下移,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2020-05-05
微信小程序分享功能onShareAppMessage(options)用法分析
這篇文章主要介紹了微信小程序分享功能onShareAppMessage(options)用法,結(jié)合具體實(shí)例形式分析了微信小程序分享功能onShareAppMessage(options)具體使用技巧與相關(guān)操作注意事項(xiàng),需要的朋友可以參考下2019-04-04
javascript獲取URL參數(shù)與參數(shù)值的示例代碼
本篇文章主要是對(duì)javascript獲取URL參數(shù)與參數(shù)值的示例代碼進(jìn)行了介紹,需要的朋友可以過(guò)來(lái)參考下,希望對(duì)大家有所幫助2013-12-12
javascript 對(duì)象屬性property與元素屬性attribute的瀏覽器支持
對(duì)象屬性property與元素屬性attribute的瀏覽器支持情況,大家可以參考下。2010-10-10
理解Javascript_02_理解undefined和null
其實(shí)在 ECMAScript 的原始類(lèi)型中,是有Undefined 和 Null 類(lèi)型的。 這兩種類(lèi)型都分別對(duì)應(yīng)了屬于自己的唯一專(zhuān)用值,即undefined 和 null。2010-10-10

