1. 程式人生 > >Web開發——JavaScript庫(jQuery效果——Callback/Chaning)

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 在語法上不是很嚴格;您可以按照希望的格式來寫,包含折行和縮排。