实用简单的jquery插件教程(翻译)

概述:这篇教程将介绍如何创建一个简单的jquery插件,并且允许用户改变一些设置。我用的是我自己的jQuery教程-(Menu with jQuery Animate effect)并把菜单转换成插件。

1、引言

         开发jQuery插件是一个高级的话题对于jQuery初学者。这个月,我一直在加强学习jQuery。尽管我学习如何把javascript代码和html文档分开。当我看到我自己的javascipt文件时,我并不满意。它太脏乱,所以我决定更近一步-学习如何开发jQuery插件来整理javascript文件。

     这个插件是基于我以前的教程- Navigation List menu + jQuery Animate Effect Tutorial 。上次,我写编写的脚本都把代码放到 document.ready段落中,就像下面的代码。

 

 1 ExpandedBlockStart.gif ContractedBlock.gif $(document).ready( function ()  {
 2
 3$('ul#menu li:even').addClass('even');
 4  
 5ExpandedSubBlockStart.gifContractedSubBlock.gif$('ul#menu li a').mouseover(function() {
 6  
 7ExpandedSubBlockStart.gifContractedSubBlock.gif   $(this).animate( { paddingLeft:"20px" }{ queue:false, duration:500 });
 8  
 9ExpandedSubBlockStart.gifContractedSubBlock.gif}
).mouseout(function() {
10
11ExpandedSubBlockStart.gifContractedSubBlock.gif   $(this).animate( { paddingLeft:"0" }{ queue:true, duration:500 });
12  
13ExpandedSubBlockStart.gifContractedSubBlock.gif}
).click(function() {
14
15ExpandedSubBlockStart.gifContractedSubBlock.gif   $(this).animate( { fontSize:"20px" }{ queue:false, duration:500 });
16}
);
17   
18}
);


但是现在 我想把代码写成类似如下格式:

1 ExpandedBlockStart.gif ContractedBlock.gif $(document).ready( function ()  {   
2       
3ExpandedSubBlockStart.gifContractedSubBlock.gif    $(#menu).animateMenu({   
4        padding:20   
5    }
)   
6               
7}
);

这样的格式看起来更简练,而且这些脚本可以在另一个工程重用。

 

2、插件结构

    jQuery 官方网站在 Plugins/Authoring页面提供了非常详细的说明。 但是我发现它非常难以理解。

    不过没关系,为了使编写插件更容易,使用下面的小段用来开发插件将是一个非常好的结构。

 

 1 // 为了避免冲突,你需要一个匿名函数来包装你的函数   
 2 ExpandedBlockStart.gifContractedBlock.gif ( function ($) {   
 3
 4    //给jQuery附加一个新的方法
 5ExpandedSubBlockStart.gifContractedSubBlock.gif   $.fn.extend({    
 6           
 7        //这儿就是你要开发插件的名子
 8ExpandedSubBlockStart.gifContractedSubBlock.gif        pluginname: function() {   
 9
10           //迭代当前匹配元素集合
11ExpandedSubBlockStart.gifContractedSubBlock.gif            return this.each(function() {   
12               
13                //插入自己的代码  
14               
15            }
);   
16        }
   
17    }
);   
18       
19//传递jQuery参数到函数中,    
20//因此我们能使用任何有效的javascipt变量名来替换“$“符号。但是我们将坚持使用 $ (我喜欢美元符号:)

21

 

 

2、带有可选项的插件

如果你看了第一步的介绍,"padding"值对于这个插件是用户配置的。他有利于一些设置,所以用户能改变设置根据他们自己的需要。请确定你为每一个变量指定了默认值。现在,如下的代码:

 1 ExpandedBlockStart.gif ContractedBlock.gif ( function ($) {   
 2
 3ExpandedSubBlockStart.gifContractedSubBlock.gif    $.fn.extend({    
 4           
 5        //pass the options variable to the function   
 6ExpandedSubBlockStart.gifContractedSubBlock.gif        pluginname: function(options) {   
 7
 8
 9            //Set the default values, use comma to separate the settings, example:   
10ExpandedSubBlockStart.gifContractedSubBlock.gif            var defaults = {   
11                padding: 20,   
12                mouseOverColor : '#000000',   
13                mouseOutColor : '#ffffff'   
14            }
   
15                   
16            var options = $.extend(defaults, options);   
17
18ExpandedSubBlockStart.gifContractedSubBlock.gif            return this.each(function() {   
19                var o = options;   
20                   
21                //code to be inserted here   
22                //you can access the value like this   
23                alert(o.padding);   
24               
25            }
);   
26        }
   
27    }
);   
28       
29}
)(jQuery); 

 

3、动态菜单插件

现在你学习了插件的结构。紧接着是我基于以前教程的开发的插件。插件它允许4个配置:

     1)、 animatePadding : 给animate 效果设置”padding“值
     2)、 defaultPadding :   给padding设置默认的值            

      3)、evenColor :设置偶数行事件的颜色
      4)、oddColor : 设置奇数行事件的颜色

 

 1 ExpandedBlockStart.gif ContractedBlock.gif ( function ($) {   
 2ExpandedSubBlockStart.gifContractedSubBlock.gif    $.fn.extend({    
 3        //plugin name - animatemenu   
 4ExpandedSubBlockStart.gifContractedSubBlock.gif        animateMenu: function(options) {   
 5
 6            //Settings list and the default values   
 7ExpandedSubBlockStart.gifContractedSubBlock.gif            var defaults = {   
 8                animatePadding: 60,   
 9                defaultPadding: 10,   
10                evenColor: '#ccc',   
11                oddColor: '#eee'   
12            }
;   
13               
14            var options = $.extend(defaults, options);   
15           
16ExpandedSubBlockStart.gifContractedSubBlock.gif            return this.each(function() {   
17                var o =options;   
18                   
19                //Assign current element to variable, in this case is UL element   
20                var obj = $(this);                 
21                   
22                //Get all LI in the UL   
23                var items = $("li", obj);   
24                     
25                //Change the color according to odd and even rows   
26                $("li:even", obj).css('background-color', o.evenColor);                
27                $("li:odd", obj).css('background-color', o.oddColor);                        
28                     
29                //Attach mouseover and mouseout event to the LI     
30ExpandedSubBlockStart.gifContractedSubBlock.gif                items.mouseover(function() {   
31ExpandedSubBlockStart.gifContractedSubBlock.gif                    $(this).animate({paddingLeft: o.animatePadding}300);   
32                       
33ExpandedSubBlockStart.gifContractedSubBlock.gif                }
).mouseout(function() {   
34ExpandedSubBlockStart.gifContractedSubBlock.gif                    $(this).animate({paddingLeft: o.defaultPadding}300);   
35                }
);   
36                   
37            }
);   
38        }
   
39    }
);   
40}
)(jQuery);   
41
42

 

 

4、完整的源代码

    你可以保存这个插件再一个单独的文件。(例如:jquery.animatemenu.js).在这个教程中,我把脚本放到html文档中

  

ContractedBlock.gif ExpandedBlockStart.gif Code
 1 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"    
 2"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">   
 3<html xmlns="http://www.w3.org/1999/xhtml" lang="en" xml:lang="en">   
 4       
 5<head>   
 6    <title></title>   
 7    <script type="text/javascript" src=" http://code.jquery.com/jquery-latest.js"></script>   
 8ExpandedBlockStart.gifContractedBlock.gif    <script>   
 9
10ExpandedSubBlockStart.gifContractedSubBlock.gif(function($){   
11ExpandedSubBlockStart.gifContractedSubBlock.gif    $.fn.extend({    
12        //plugin name - animatemenu   
13ExpandedSubBlockStart.gifContractedSubBlock.gif        animateMenu: function(options) {   
14
15ExpandedSubBlockStart.gifContractedSubBlock.gif            var defaults = {   
16                animatePadding: 60,   
17                defaultPadding: 10,   
18                evenColor: '#ccc',   
19                oddColor: '#eee',   
20            }
;   
21               
22            var options = $.extend(defaults, options);   
23           
24ExpandedSubBlockStart.gifContractedSubBlock.gif            return this.each(function() {   
25                  var o =options;   
26                  var obj = $(this);                   
27                  var items = $("li", obj);   
28                     
29                  $("li:even", obj).css('background-color', o.evenColor);                  
30                  $("li:odd", obj).css('background-color', o.oddColor);                      
31                     
32ExpandedSubBlockStart.gifContractedSubBlock.gif                  items.mouseover(function() {   
33ExpandedSubBlockStart.gifContractedSubBlock.gif                      $(this).animate({paddingLeft: o.animatePadding}300);   
34                       
35ExpandedSubBlockStart.gifContractedSubBlock.gif                  }
).mouseout(function() {   
36ExpandedSubBlockStart.gifContractedSubBlock.gif                      $(this).animate({paddingLeft: o.defaultPadding}300);   
37                       
38                  }
);   
39            }
);   
40        }
   
41    }
);   
42}
)(jQuery);   
43       
44    
</script>   
45       
46ExpandedBlockStart.gifContractedBlock.gif    <script type="text/javascript">   
47ExpandedSubBlockStart.gifContractedSubBlock.gif    $(document).ready(function() {   
48ExpandedSubBlockStart.gifContractedSubBlock.gif        $('#menu').animateMenu({animatePadding: 30, defaultPadding:10});   
49    }
);    
50    
</script>   
51ExpandedBlockStart.gifContractedBlock.gif    <style>   
52ExpandedSubBlockStart.gifContractedSubBlock.gif      body {}{font-family:arial;font-style:bold}   
53ExpandedSubBlockStart.gifContractedSubBlock.gif      a {}{color:#666; text-decoration:none} 
54ExpandedSubBlockStart.gifContractedSubBlock.gif        #menu {}{list-style:none;width:160px;padding-left:10px;}   
55ExpandedSubBlockStart.gifContractedSubBlock.gif        #menu li {}{margin:0;padding:5px;cursor:hand;cursor:pointer}   
56    
</style>   
57</head>      
58<body>   
59
60<ul id="menu">   
61    <li>Home</li>   
62    <li>Posts</li>   
63    <li>About</li>   
64    <li>Contact</li>   
65</ul>   
66
67</body>   
68</html>   

我希望这个教程能让你更容易的理解jQuery插件

转载于:https://www.cnblogs.com/luckboy/archive/2009/06/20/1507318.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值