3.6_淡出和滑動特效
淡出和滑動的自訂特效(FadeSldieToggle),來了解特效反覆切換(toggle)和自訂特效速度等方法

淡出和滑動的自訂特效(FadeSldieToggle),來了解特效反覆切換(toggle)和自訂特效速度等方法


確定自製動畫能運行

如何自製fadeSlideToggle()特效?

/images/coding-note/javascript/jQuery-30day/13.Homework-Solution/13.Homework-Solution-0.00.04.71.jpg

運用$.fn來擴充自訂的特效FadeSlideToggle,使該自訂特效能夠如內訂的jquery特效般來被使用。

/images/coding-note/javascript/jQuery-30day/13.Homework-Solution/13.Homework-Solution-0.01.53.21.jpg

運行結果,成功console出自訂的訊息

/images/coding-note/javascript/jQuery-30day/13.Homework-Solution/13.Homework-Solution-0.01.59.71.jpg

animate()的padding問題修正

fadeToggle為切換透明度(opacity),slideToggle為切換高度(height)

/images/coding-note/javascript/jQuery-30day/13.Homework-Solution/13.Homework-Solution-0.02.44.71.jpg

執行0.5秒內高度降為0的效果

/images/coding-note/javascript/jQuery-30day/13.Homework-Solution/13.Homework-Solution-0.03.06.71.jpg

運行結果,運行縮減高度的動畫(但是padding會造成高度問題,沒有完全的讓高度降為0)

/images/coding-note/javascript/jQuery-30day/13.Homework-Solution/13.Homework-Solution-0.03.13.12.jpg

移除掉.box{padding:1em;},就可讓高度縮減的功能完全正常

/images/coding-note/javascript/jQuery-30day/13.Homework-Solution/13.Homework-Solution-0.03.18.71.jpg

設定<div>的display:none

同時運作高度和透明度降為0的動畫

/images/coding-note/javascript/jQuery-30day/13.Homework-Solution/13.Homework-Solution-0.03.43.88.jpg

運行結果,成功運行動畫(但在console檢示,仍可看到<div class="box">,因為只是高度和透明度看不到而已,<div>仍然存在,需修改display屬性,才能完全隱藏)

/images/coding-note/javascript/jQuery-30day/13.Homework-Solution/13.Homework-Solution-0.03.57.58.jpg

設定display:none,就可以完全隱藏了

/images/coding-note/javascript/jQuery-30day/13.Homework-Solution/13.Homework-Solution-0.04.04.46.jpg

animate()的toggle應用

這次將height首opacity設為toggle(可反覆切換的屬性)

/images/coding-note/javascript/jQuery-30day/13.Homework-Solution/13.Homework-Solution-0.04.17.79.jpg

運行結果,設定為togle後,一樣是成功運行高度和透明度改變的動畫,但觀察其原始碼,可看到<div class="box">的display屬性被設為none了

/images/coding-note/javascript/jQuery-30day/13.Homework-Solution/13.Homework-Solution-0.04.25.71.jpg

而且toggle可以反覆切換,出現和消失的動畫

/images/coding-note/javascript/jQuery-30day/13.Homework-Solution/13.Homework-Solution-0.04.42.96.jpg

jquery的鍊結功能

想讓此自製的動畫具備jquery的chaining(鍊結)的功能(執行完動畫後,執行addClass('testing');)

/images/coding-note/javascript/jQuery-30day/13.Homework-Solution/13.Homework-Solution-0.05.03.17.jpg

運行結果,console中顯示錯誤訊息(因為此自製的特效尚未回傳jquery物件,所以無法達成鍊結的功能)

/images/coding-note/javascript/jQuery-30day/13.Homework-Solution/13.Homework-Solution-0.05.08.50.jpg

所要記得要在自訂的特效內寫入return,以回傳此jquery物件,以便執行下一步動作

/images/coding-note/javascript/jQuery-30day/13.Homework-Solution/13.Homework-Solution-0.05.31.08.jpg

運行結果,動畫成功運行。檢示其原始碼,可看到成功在動畫執行完後,執行了addClass('testing'),使<div class="box">成功加入了testing的樣式。

/images/coding-note/javascript/jQuery-30day/13.Homework-Solution/13.Homework-Solution-0.05.40.79.jpg

傳送自訂參數給自訂的動畫

自訂數值500做為speed參數

/images/coding-note/javascript/jQuery-30day/13.Homework-Solution/13.Homework-Solution-0.06.13.71.jpg

運行結果,動畫速度改為0.5秒內撥放完畢了

/images/coding-note/javascript/jQuery-30day/13.Homework-Solution/13.Homework-Solution-0.06.14.71.jpg

什麼都不輸入,也可正常運作,因為jquery有預設的速度

/images/coding-note/javascript/jQuery-30day/13.Homework-Solution/13.Homework-Solution-0.06.20.71.jpg

這回設定為,如果沒輸入速度,便設定速度為2000

/images/coding-note/javascript/jQuery-30day/13.Homework-Solution/13.Homework-Solution-0.06.42.29.jpg

運行結果,動畫在2秒內跑完

/images/coding-note/javascript/jQuery-30day/13.Homework-Solution/13.Homework-Solution-0.06.45.71.jpg

第一個動畫執行完後,接續下個函式動作

解說內建的jquery特效是如何在特效執行完後,在往下執行下一個內建的特效,例如slideDown執行完後,在執行swing的特效

/images/coding-note/javascript/jQuery-30day/13.Homework-Solution/13.Homework-Solution-0.07.14.12.jpg

其實swing的功能,就如同寫入function(){}而已,你可在自訂的function()內,加入你自己想要的特效功能

/images/coding-note/javascript/jQuery-30day/13.Homework-Solution/13.Homework-Solution-0.07.19.38.jpg

把function(){}當作參數傳入自訂特效中,以便讓特效執行完後,執行該自訂的function

/images/coding-note/javascript/jQuery-30day/13.Homework-Solution/13.Homework-Solution-0.08.23.71.jpg

運行結果,成功在動畫執行完後,console出complete字串

/images/coding-note/javascript/jQuery-30day/13.Homework-Solution/13.Homework-Solution-0.08.29.71.jpg

將之前的寫法function(){fn())改為fn就可以了,沒有必要在多寫一個function()來呼叫fn

/images/coding-note/javascript/jQuery-30day/13.Homework-Solution/13.Homework-Solution-0.08.43.71.jpg

記得不可以寫成fn(),因為這樣會直接執行fn(),而不會等到特效跑完後才執行

/images/coding-note/javascript/jQuery-30day/13.Homework-Solution/13.Homework-Solution-0.08.48.08.jpg

運行結果,修改完fn的寫法後,成功在動畫執行完後,console出complete字串

/images/coding-note/javascript/jQuery-30day/13.Homework-Solution/13.Homework-Solution-0.09.13.54.jpg

判斷有無傳入參數,以執行不同動作

如果沒有輸入動畫執行完後,所要執行的函數,那fn的值會為何?

/images/coding-note/javascript/jQuery-30day/13.Homework-Solution/13.Homework-Solution-0.09.31.88.jpg

運行結果,console出fn為undefined

/images/coding-note/javascript/jQuery-30day/13.Homework-Solution/13.Homework-Solution-0.09.36.71.jpg

所以要如判斷fn的值是否為函式形態呢?
至jquery的函式庫中查-isFunction來判斷此參數是否為函式

/images/coding-note/javascript/jQuery-30day/13.Homework-Solution/13.Homework-Solution-0.10.13.17.jpg

如果是函式形態,便console出'is a function',否則為'is undefined'

/images/coding-note/javascript/jQuery-30day/13.Homework-Solution/13.Homework-Solution-0.10.35.71.jpg

運行結果,成功判斷出沒有輸入函式的情況,is undefined

/images/coding-note/javascript/jQuery-30day/13.Homework-Solution/13.Homework-Solution-0.10.37.71.jpg

這次為測式有輸入函式的情況

/images/coding-note/javascript/jQuery-30day/13.Homework-Solution/13.Homework-Solution-0.10.44.75.jpg

運行結果,成功console出有輸入函式時的判斷,is a function

/images/coding-note/javascript/jQuery-30day/13.Homework-Solution/13.Homework-Solution-0.10.48.25.jpg

解說在jquery函式庫中,有許多判斷型態的方法,如:isFunction、isArray、isWindow等等~~

/images/coding-note/javascript/jQuery-30day/13.Homework-Solution/13.Homework-Solution-0.10.56.71.jpg