1. 程式人生 > >jQuery外掛開發學習

jQuery外掛開發學習

1、jQuery外掛編寫準備

要使用jQuery進行自定義外掛的編寫,首先應該的是瞭解jQuery的外掛機制或者說是通過jQuery庫本身提供的哪些函式進行外掛的編寫,主要涉及的兩個函式是:jQuery.extend(object)和jQuery.fn.extend(object),其具體作用可以通過查詢jQuery的API文件 得到,這裡也把API簡單轉過來:

A、 jQuery.extend(object)

擴充套件jQuery物件本身,用來在jQuery名稱空間上增加新函式。 例如: Js程式碼  收藏程式碼
  1. jQuery.extend({  
  2.   min: function
    (a, b) { return a < b ? a : b; },  
  3.   max: function(a, b) { return a > b ? a : b; }  
  4. });   
使用方法: Js程式碼  收藏程式碼
  1. jQuery.min(2,3);  //=> 2  
  2. $.max(4,5);         //=>5  
B、jQuery.fn.extend(object) 擴充套件 jQuery 元素集來提供新的方法(通常用來製作外掛)。具體例項將在下面進行一個簡單的示例來進行了解。

2、簡單的jQuery外掛的編寫

A、jQuery外掛的基本格式

Js程式碼  收藏程式碼
  1. /* 
  2.  * digitClocker 
  3.  * @author: zhoucl 
  4.  * @date  : 08/11/2011 
  5.  */  
  6. (function($, undefined){      
  7.       ...  
  8.       //code here  
  9.       ...  
  10. })(jQuery);  

B、將原來直接javascript編寫的一個電子時鐘改寫為jQuery外掛使用,程式碼如下:

Java程式碼  收藏程式碼
  1. /* 
  2.  * digitClocker 
  3.  * @author: zhoucl 
  4.  * @date  : 03/11/2011 
  5.  */  
  6. (function($, undefined){      
  7.     $.extend($.fn, {  
  8.         digitclocker: function(settings){  
  9.             var params = $.extend({  
  10.                 baseURL: '../js/jquery/custom_plugins/',  
  11.                 imgPath: 'digits/'  
  12.             }, settings);  
  13.             for(var i = 1; i < 9; i++) {  
  14.                 if(i % 3 == 0) $(this).append("<img alt='0' src='" + params.baseURL + params.imgPath + "colon.gif'>");  
  15.                 else $(this).append("<img class='clockImage' alt='0' src='" + params.baseURL + params.imgPath + "0.gif'>");  
  16.             }  
  17.             new DigitClock(params, $(this));  
  18.         }  
  19.     });  
  20.     setInterval(function(){  
  21.         DigitClock.reDraw();  
  22.     }, 1000);  
  23.     DigitClock = function(params, container) {  
  24.         this.params = params;  
  25.         this.container = container;  
  26.         DigitClock.clocks.push(this);  
  27.         DigitClock.reDraw();  
  28.     }  
  29.     DigitClock.clocks=[];  
  30.     DigitClock.reDraw = function() {  
  31.         var d=new Date();  
  32.         for (var i = 0; i < this.clocks.length; i++) {  
  33.             this.clocks[i].setTime(d.getHours(),d.getMinutes(),d.getSeconds());  
  34.         }  
  35.     }  
  36.     DigitClock.preZero = function(n, pos) {  
  37.         return ("0"._digitClockRepeat(pos-1)+n).slice(-pos);  
  38.     }  
  39.     DigitClock.prototype = {  
  40.         setTime : function(h, i ,s) {  
  41.             this.setImage(  
  42.                 DigitClock.preZero(h,2) + DigitClock.preZero(i,2) + DigitClock.preZero(s,2)  
  43.             )  
  44.         },  
  45.         setImage: function(s) {  
  46.             s = s.split("");  
  47.             var baseURL = this.params.baseURL;  
  48.             var imgPath = this.params.imgPath;  
  49.             var i = 0;  
  50.             $(".clockImage"this.container).each(function(){  
  51.                 $(this).attr("src", baseURL + imgPath + s[i++] +".gif");  
  52.             });  
  53.         }  
  54.     }  
  55.     String.prototype._digitClockRepeat = function(n) {  
  56.         return new Array(n+1).join(this);  
  57.     }  
  58. })(jQuery);  

 引用上述js檔案,在頁面中得呼叫程式碼如下:

Html程式碼  收藏程式碼
  1. <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">  
  2. <html>  
  3.   <head>  
  4.     <title>simple_test.html</title>  
  5.     <meta http-equiv="keywords" content="keyword1,keyword2,keyword3">  
  6.     <meta http-equiv="description" content="this is my page">  
  7.     <meta http-equiv="content-type" content="text/html; charset=UTF-8">  
  8.     <!--呼叫jQuery的庫:jquery-1.5.2.js-->  
  9.     <script src="../js/jquery/jquery-1.5.2.js" type="text/javascript"></script>  
  10.     <script src="../js/jquery/custom_plugins/jquery.clzps.digitclock.js" type="text/javascript"></script>  
  11.     <script>  
  12.       $(function(){  
  13.           $('#digitClock').digitclocker({  
  14.         baseURL: '../js/jquery/custom_plugins/',  
  15.         imgPath: 'digits/'  
  16.       });  
  17.       });  
  18.     </script>  
  19.   </head>  
  20.   <body>  
  21.      <div id="digitClock"></div>  
  22.   </body>  
  23. </html>  

效果圖如下: