[js高手之路]jquery插件开发实战-选项卡详解

在jquery中,插件开发常见的有:

一种是为$函数本身扩展一个方法,这种是静态扩展(也叫类扩展),这种插件一般是工具方法,

还有一种是扩展在原型对象$.fn上面的,开发出来的插件是用在dom元素上面的

一、类级别的扩展

1         $.showMsg = function(){
2             alert('hello,welcome to study jquery plugin dev');
3         }
4         // $.showMsg();

注意要提前引入jquery库, 上例在$函数上面添加了一个方法showMsg,那么就可以用$.showMsg()调用了

1          $.showName = function(){
2             console.log( 'ghostwu' );
3         }
4         $.showName();

这种插件比较少见,一般都是用来开发工具方法,如jquery中的$.trim, $.isArray()等等

二、把功能扩展在$.fn上,

这种插件就是用在元素上,比如,我扩展一个功能,点击按钮,显示当前按钮的值

$.fn.showValue = function(){
      return $(this).val();
}

        $(function(){
            $("input").click(function(){
                // alert($(this).showMsg());
                alert($(this).showMsg());
            });
        });

<input type="button" value="点我">

在$.fn上添加一个showValue方法, 返回当前元素的value值. 在获取到页面input元素,绑定事件之后,就可以调用这个方法,显示按钮的值 "点我",在实际插件开发中,常用的就是这种.接下来,我们就用这种扩展机制开发一个简单的选项卡插件:

页面布局与样式:

 1 <!DOCTYPE html>
 2 <html lang="en">
 3 <head>
 4     <meta charset="UTF-8">
 5     <meta name="viewport" content="width=device-width, initial-scale=1.0">
 6     <meta http-equiv="X-UA-Compatible" content="ie=edge">
 7     <title>Document</title>
 8     <script src="https://cdn.bootcss.com/jquery/1.12.0/jquery.js"></script>
 9     <style>
10         #tab {
11             width:400px;
12             height:30px;
13         }
14         #tab li, #tab ul {
15             list-style-type:none;
16         }
17         #tab ul {
18             width:400px;
19             height: 30px;
20             border-bottom:1px solid #ccc;
21             line-height: 30px;
22         }
23         #tab ul li {
24             float:left;
25             margin-left: 20px;
26             padding:0px 10px;
27         }
28         #tab ul li.active {
29             background: yellow;
30         }
31         #tab ul li a {
32             text-decoration: none;
33             color:#666;
34         }
35         #tab div {
36             width:400px;
37             height:350px;
38             background-color:#ccc;
39         }
40         .clearfix:after{
41             content: '';
42             display: block;
43             clear: both;
44             height: 0;
45             visibility: hidden;
46         }
47     </style>
48     <script src="tab2.js"></script>
49     <script>
50         $(function(){
51             $("#tab").tabs( { evType : 'mouseover' } );
52         });
53     </script>
54 </head>
55 <body>
56     <div id="tab">
57         <ul class="clearfix">
58             <li><a href="#tab1">选项1</a></li>
59             <li><a href="#tab2">选项2</a></li>
60             <li><a href="#tab3">选项3</a></li>
61         </ul>
62         <div id="tab1">作者:ghostwu(1)
63             <div>博客: http://www.cnblogs.com/ghostwu/</div>
64         </div>
65         <div id="tab2">作者:ghostwu(2)
66             <div>博客: http://www.cnblogs.com/ghostwu/</div>
67         </div>
68         <div id="tab3">作者:ghostwu(3)
69             <div>博客: http://www.cnblogs.com/ghostwu/</div>
70         </div>
71     </div>
72 </body>
73 </html>

tab2.js文件

 1 ;(function ($) {
 2     $.fn.tabs = function (opt) {
 3         var def = { evType: "click" }; //定义了一个默认配置
 4         var opts = $.extend({}, def, opt);
 5         var obj = $(this);
 6 
 7         $("ul li:first", obj).addClass("active");
 8         obj.children("div").hide();
 9         obj.children("div").eq(0).show();
10 
11         $("ul li", obj).bind(opts.evType, function () {
12             $(this).attr("class", "active").siblings("li").attr("class","");
13             var id = $(this).find("a").attr("href").substring(1);
14             obj.children("div").hide();
15             $("#" + id, obj).show();
16         });
17     };
18 })(jQuery);

 

1,一个自执行函数,把插件封装成模块,把jQuery对象传给形参$

2,第3行,定义一个默认配置,选项卡的触发类型,默认为点击事件

3,第4行,如果opt传参,就用opt的配置,否者就用第3行的默认配置,这行的作用就是为了在不改变插件源码的情况下,可以配置插件的表现形式

4,第7-9行,让选项卡第一个div显示,其余的都隐藏,让第一个tab加上class='active' 黄色高亮选中

5,第11-16行,点击对应的选项卡,让对应的div显示与隐藏

 

posted @ 2017-08-29 17:19  ghostwu  阅读(1236)  评论(0编辑  收藏  举报
Copyright ©2017 ghostwu