zoukankan      html  css  js  c++  java
  • [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显示与隐藏

  • 相关阅读:
    Warsaw University Contest Petrozavodsk, Thursday, January 31, 2008 J题,Gym100096J
    FZU2282--错排公式
    POJ 3468 区间加减 区间求和
    HDU 1556 树状数组
    HDU 5480 树状数组
    Tomcat
    Nginx
    Centos7安装后无法联网
    限制服务器ssh登录及防御措施
    DHCP
  • 原文地址:https://www.cnblogs.com/ghostwu/p/7449318.html
Copyright © 2011-2022 走看看