jQuery動畫_動力節(jié)點節(jié)點Java學(xué)院整理
用JavaScript實現(xiàn)動畫,原理非常簡單:我們只需要以固定的時間間隔(例如,0.1秒),每次把DOM元素的CSS樣式修改一點(例如,高寬各增加10%),看起來就像動畫了。
但是要用JavaScript手動實現(xiàn)動畫效果,需要編寫非常復(fù)雜的代碼。如果想要把動畫效果用函數(shù)封裝起來便于復(fù)用,那考慮的事情就更多了。
使用jQuery實現(xiàn)動畫,代碼已經(jīng)簡單得不能再簡化了:只需要一行代碼!
讓我們先來看看jQuery內(nèi)置的幾種動畫樣式:
show / hide
直接以無參數(shù)形式調(diào)用show()和hide(),會顯示和隱藏DOM元素。但是,只要傳遞一個時間參數(shù)進(jìn)去,就變成了動畫:
var div = $('#test-show-hide');
div.hide(3000); // 在3秒鐘內(nèi)逐漸消失
時間以毫秒為單位,但也可以是'slow','fast'這些字符串:
var div = $('#test-show-hide');
div.show('slow'); // 在0.6秒鐘內(nèi)逐漸顯示
toggle()方法則根據(jù)當(dāng)前狀態(tài)決定是show()還是hide()。
slideUp / slideDown
你可能已經(jīng)看出來了,show()和hide()是從左上角逐漸展開或收縮的,而slideUp()和slideDown()則是在垂直方向逐漸展開或收縮的。
slideUp()把一個可見的DOM元素收起來,效果跟拉上窗簾似的,slideDown()相反,而slideToggle()則根據(jù)元素是否可見來決定下一步動作:
var div = $('#test-slide');
div.slideUp(3000); // 在3秒鐘內(nèi)逐漸向上消失
fadeIn / fadeOut
fadeIn()和fadeOut()的動畫效果是淡入淡出,也就是通過不斷設(shè)置DOM元素的opacity屬性來實現(xiàn),而fadeToggle()則根據(jù)元素是否可見來決定下一步動作:
var div = $('#test-fade');
div.fadeOut('slow'); // 在0.6秒內(nèi)淡出
自定義動畫
如果上述動畫效果還不能滿足你的要求,那就祭出最后大招:animate(),它可以實現(xiàn)任意動畫效果,我們需要傳入的參數(shù)就是DOM元素最終的CSS狀態(tài)和時間,jQuery在時間段內(nèi)不斷調(diào)整CSS直到達(dá)到我們設(shè)定的值:
var div = $('#test-animate');
div.animate({
opacity: 0.25,
width: '256px',
height: '256px'
}, 3000); // 在3秒鐘內(nèi)CSS過渡到設(shè)定值
animate()還可以再傳入一個函數(shù),當(dāng)動畫結(jié)束時,該函數(shù)將被調(diào)用:
var div = $('#test-animate');
div.animate({
opacity: 0.25,
width: '256px',
height: '256px'
}, 3000, function () {
console.log('動畫已結(jié)束');
// 恢復(fù)至初始狀態(tài):
$(this).css('opacity', '1.0').css('width', '128px').css('height', '128px');
});
實際上這個回調(diào)函數(shù)參數(shù)對于基本動畫也是適用的。
有了animate(),你就可以實現(xiàn)各種自定義動畫效果了:
animate()
串行動畫
jQuery的動畫效果還可以串行執(zhí)行,通過delay()方法還可以實現(xiàn)暫停,這樣,我們可以實現(xiàn)更復(fù)雜的動畫效果,而代碼卻相當(dāng)簡單:
var div = $('#test-animates');
// 動畫效果:slideDown - 暫停 - 放大 - 暫停 - 縮小
div.slideDown(2000)
.delay(1000)
.animate({
width: '256px',
height: '256px'
}, 2000)
.delay(1000)
.animate({
width: '128px',
height: '128px'
}, 2000);
}
</script>
因為動畫需要執(zhí)行一段時間,所以jQuery必須不斷返回新的Promise對象才能后續(xù)執(zhí)行操作。簡單地把動畫封裝在函數(shù)中是不夠的。
為什么有的動畫沒有效果
你可能會遇到,有的動畫如slideUp()根本沒有效果。這是因為jQuery動畫的原理是逐漸改變CSS的值,如height從100px逐漸變?yōu)?。但是很多不是block性質(zhì)的DOM元素,對它們設(shè)置height根本就不起作用,所以動畫也就沒有效果。
此外,jQuery也沒有實現(xiàn)對background-color的動畫效果,用animate()設(shè)置background-color也沒有效果。這種情況下可以使用CSS3的transition實現(xiàn)動畫效果。
相關(guān)文章
jQuery中驗證表單提交方式及序列化表單內(nèi)容的實現(xiàn)
之前項目中使用的表單提交方式,使用form()方法可以將提交事件脫離submit按鈕,綁定到任何事件中,下面有個不錯的示例大家可以參考下2014-01-01
jQuery中animate()的使用方法及解決$(”body“).animate({“scrollTop”:top})
這篇文章主要介紹了關(guān)于jQuery中animate()的使用方法及解決$("body").animate({"scrollTop":top})不被Firefox支持的問題,文中介紹的非常詳細(xì),相信對大家具有一定的參考價值,需要的朋友們下面來一起看看吧。2017-04-04
通過jQuery源碼學(xué)習(xí)javascript(二)
昨天寫了篇通過jQuery源碼學(xué)習(xí)javascript(一),里面有一個定義對象C的方法,我早期也沒有太注意這個方面的技術(shù)細(xì)節(jié)。后來我查了一下資料,發(fā)現(xiàn)里面有很多巧的地方。今天與大家分享2012-12-12
jQuery實現(xiàn)指定區(qū)域外單擊關(guān)閉指定層的方法【經(jīng)典】
這篇文章主要介紹了jQuery實現(xiàn)指定區(qū)域外單擊關(guān)閉指定層的方法,可實現(xiàn)在彈出層外任意位置點擊關(guān)閉彈出層的功能,涉及jQuery事件操作方法,包含了詳盡的代碼功能說明,非常簡單實用,需要的朋友可以參考下2016-06-06
jquery代碼實現(xiàn)簡單的隨機(jī)圖片瀑布流效果
瀑布流布局最近真的很流行,很多人都跟我一樣想知道是怎么做出來的吧,經(jīng)過網(wǎng)上搜索大量的參考結(jié)合N邊的實驗今天終于被我寫出來了,這里分享給大家,有需要的小伙伴參考下吧。2015-04-04
淺談window.onbeforeunload() 事件調(diào)用ajax
下面小編就為大家?guī)硪黄獪\談window.onbeforeunload() 事件調(diào)用ajax。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧2016-06-06

