Web開發——JavaScript庫(jQuery效果——Callback/Chaning)
Callback 函式在當前動畫 100% 完成之後執行。
1、jQuery Callback
1.1 jQuery 動畫的問題
許多 jQuery 函式涉及動畫。這些函式也許會將 speed 或 duration 作為可選引數。
例子:$("p").hide("slow")
speed 或 duration 引數可以設定許多不同的值,比如 "slow", "fast", "normal" 或毫秒。
1 $("button").click(function(){ 2 $("p").hide(1000);3 });
由於 JavaScript 語句(指令)是逐一執行的 - 按照次序,動畫之後的語句可能會產生錯誤或頁面衝突,因為動畫還沒有完成。
為了避免這個情況,您可以以引數的形式新增 Callback 函式。
1.2 jQuery Callback函式
當動畫100%完成後,即呼叫Callback函式。
典型的語法:
1 $(selector).hide(speed,callback)
callback 引數是一個在 hide 操作完成後被執行的函式。
錯誤(沒有callback):
1 $("p").hide(1000); 2 alert("The paragraph is now hidden");
舉例說明:
1 <!DOCTYPE html> 2 <html> 3 <head> 4 <meta charset="utf-8"> 5 <meta http-equiv="Content-Type" content="text/html; charset=gb2312" /> 6 <meta http-equiv="Content-Language" content="zh-cn" /> 7 <title>My test page</title> 8 9 <!--引用jQuery庫,src可以直接指向本地下載的jQery庫--> 10 <!--<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.8.3/jquery.min.js">--> 11 <script src="jquery-3.3.1.js"></script> 12 <script type="text/javascript"> 13 $(document).ready(function() { 14 $("button").click(function() { 15 $("p").hide(2000); 16 alert("The paragraph is now hidden"); 17 }); 18 }); 19 20 </script> 21 </head> 22 23 <body> 24 25 <button type="button">Hide</button> 26 <p>This is a paragraph with little content.</p> 27 28 </body> 29 </html>
正確(有callback):
1 $("p").hide(1000, function() { 2 alert("The paragraph is now hidden"); 3 });
舉例說明:
1 <!DOCTYPE html> 2 <html> 3 <head> 4 <meta charset="utf-8"> 5 <meta http-equiv="Content-Type" content="text/html; charset=gb2312" /> 6 <meta http-equiv="Content-Language" content="zh-cn" /> 7 <title>My test page</title> 8 9 <!--引用jQuery庫,src可以直接指向本地下載的jQery庫--> 10 <!--<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.8.3/jquery.min.js">--> 11 <script src="jquery-3.3.1.js"></script> 12 <script type="text/javascript"> 13 $(document).ready(function() { 14 $("button").click(function() { 15 $("p").hide(2000, function() { 16 alert("The paragraph is now hidden") 17 }); 18 }); 19 }); 20 21 </script> 22 </head> 23 24 <body> 25 26 <button type="button">Hide</button> 27 <p>This is a paragraph with little content.</p> 28 29 </body> 30 </html>
結論:如果您希望在一個涉及動畫的函式之後來執行語句,請使用 callback 函式。
2、jQuery Chaning
通過 jQuery,您可以把動作/方法連結起來。
Chaining 允許我們在一條語句中允許多個 jQuery 方法(在相同的元素上)。
2.1 jQuery 方法連結
直到現在,我們都是一次寫一條 jQuery 語句(一條接著另一條)。
不過,有一種名為連結(chaining)的技術,允許我們在相同的元素上執行多條 jQuery 命令,一條接著另一條。
提示:這樣的話,瀏覽器就不必多次查詢相同的元素。
如需連結一個動作,您只需簡單地把該動作追加到之前的動作上。
舉例(下面的例子把 css(), slideUp(), and slideDown() 連結在一起。"p1" 元素首先會變為紅色,然後向上滑動,然後向下滑動):
1 <!DOCTYPE html> 2 <html> 3 <head> 4 <meta charset="utf-8"> 5 <meta http-equiv="Content-Type" content="text/html; charset=gb2312" /> 6 <meta http-equiv="Content-Language" content="zh-cn" /> 7 <title>My test page</title> 8 9 <!--引用jQuery庫,src可以直接指向本地下載的jQery庫--> 10 <!--<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.8.3/jquery.min.js">--> 11 <script src="jquery-3.3.1.js"></script> 12 <script type="text/javascript"> 13 <!-- $(document).ready(function() { --> 14 <!-- $("button").click(function() { --> 15 <!-- $("p").css("color","red").slideUp(2000).slideDown(2000); --> 16 <!-- }); --> 17 <!-- }); --> 18 19 <!--或者寫成如下語句,jQuery 會拋掉多餘的空格,並按照一行長程式碼來執行上面的程式碼行--> 20 $(document).ready(function() { 21 $("button").click(function() { 22 $("p").css("color","red") 23 .slideUp(2000) 24 .slideDown(2000); 25 }); 26 }); 27 28 </script> 29 </head> 30 31 <body> 32 33 <p id="p1">jQuery 樂趣十足!</p> 34 <button>點選這裡</button> 35 36 </body> 37 </html>
如果需要,我們也可以新增多個方法呼叫。
提示:當進行連結時,程式碼行會變得很差。不過,jQuery 在語法上不是很嚴格;您可以按照希望的格式來寫,包含折行和縮排。