实用简单的jQuery插件教程

开发 后端
对于jQuery初学者来说,开发jQuery插件是一个高级话题,这篇教程是一个如何创建简单的jQuery插件教程,并且允许用户改变一些设置。笔者用的是自己的jQuery教程-(Menu with jQuery Animate effect)并把菜单转换成插件。

51CTO推荐专题: jQuery开发手册

1、jQuery插件教程引言

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

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

 

 

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

 

 

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

1$(document).ready(function() {   

3    $(#menu).animateMenu({  
4   padding:20  
5    })  
6
7});

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

2、插件结构

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

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

 

 

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

 

 

2、带有可选项的插件

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

 

 

1(function($){   
 2
 3    $.fn.extend({   
 4
 5   //pass the options variable to the function  
 6   pluginname: function(options) {  
 7
 8
 9  //Set the default values, use comma to separate the settings, example:  
10  var defaults = {  
11 padding: 20,  
12 mouseOverColor : '#000000',  
13 mouseOutColor : '#ffffff'  
14  }  
15   
16  var options = $.extend(defaults, options);  
17
18  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(function($){   
 2    $.fn.extend({   
 3   //plugin name - animatemenu  
 4   animateMenu: function(options) {  
 5
 6  //Settings list and the default values  
 7  var defaults = {  
 8 animatePadding: 60,  
 9 defaultPadding: 10,  
10 evenColor: '#ccc',  
11 oddColor: '#eee'  
12  };  
13
14  var options = $.extend(defaults, options);  
15
16  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
30 items.mouseover(function() {  
31$(this).animate({paddingLeft: o.animatePadding}, 300);  
32  
33 }).mouseout(function() {  
34$(this).animate({paddingLeft: o.defaultPadding}, 300);  
35 });  
36   
37  });  
38   }  
39    });  
40})(jQuery);  
41
42

 

 

4、完整的源代码

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

 

 

1  
2"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">   
 3< HTML lang=en xmlns="http://www.w3.org/1999/xhtml" xml:lang="en">  
 4 
 5< HEAD>  
 6      
 7    < SCRIPT type=text/javascript src=" http://code.jquery.com/jquery-latest.js">< /SCRIPT>  
 8    < SCRIPT>  
 9
10(function($){  
11    $.fn.extend({   
12   //plugin name - animatemenu  
13   animateMenu: function(options) {  
14
15  var defaults = {  
16 animatePadding: 60,  
17 defaultPadding: 10,  
18 evenColor: '#ccc',  
19 oddColor: '#eee',  
20  };  
21
22  var options = $.extend(defaults, options);  
23
24  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
32   items.mouseover(function() {  
33  $(this).animate({paddingLeft: o.animatePadding}, 300);  
34  
35   }).mouseout(function() {  
36  $(this).animate({paddingLeft: o.defaultPadding}, 300);  
37  
38   });  
39  });  
40   }  
41    });  
42})(jQuery);  
43 
44    < /SCRIPT>  
45 
46    < SCRIPT type=text/javascript>  
47    $(document).ready(function() {  
48   $('#menu').animateMenu({animatePadding: 30, defaultPadding:10});  
49    });   
50    < /SCRIPT>  
51    < STYLE>  
52 body {}{font-family:arial;font-style:bold}  
53 a {}{color:#666; text-decoration:none}
54   #menu {}{list-style:none;width:160px;padding-left:10px;}  
55   #menu li {}{margin:0;padding:5px;cursor:hand;cursor:pointer}  
56    < /STYLE>  
57
58  
59
60
< UL id=menu>  
61    < LI>Home  
62    < LI>Posts  
63    < LI>About  
64    < LI>Contact  
65< /LI>< /UL>
   
66
67  
68  
 

 

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

【编辑推荐】

  1. jQuery调用WCF服务传递JSON对象
  2. 学习jQuery必须知道的几种常用方法
  3. 用XML+XSLT+CSS+JQuery组建ASP.NET网站
  4. 使用jQuery和PHP构建一个受Ajax驱动的Web页面
  5. 使用 jQuery 简化 Ajax 开发
责任编辑:彭凡 来源: cnblogs
相关推荐

2011-06-17 11:22:33

jQueryjQuery插件

2013-12-02 15:10:56

jQuery插件

2012-06-21 09:28:47

jQuery

2011-05-23 08:43:40

jQueryjQuery插件

2014-05-26 16:37:10

jQueryCSS3

2012-08-08 13:50:28

jQuery

2011-03-30 09:53:43

jQueryjQuery插件

2013-08-30 10:02:48

2011-01-21 07:22:48

jQuerywebJavaScript

2013-12-02 14:53:20

jQuery插件

2012-04-05 09:50:11

jQuery

2011-07-27 13:04:39

jQuery

2012-08-22 10:28:03

jQuery

2012-11-15 09:41:43

jQuery

2012-05-10 13:45:45

jQuery

2013-01-09 10:20:26

jQueryFlotjQuery插件

2013-12-02 15:36:17

jQuery插件

2010-08-27 10:12:53

CSS

2011-03-31 11:40:13

SQL

2013-12-02 15:43:05

jQuery插件
点赞
收藏

51CTO技术栈公众号