jquery插件开发之选项卡制作详解


Posted in jQuery onAugust 30, 2017

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

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

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

一、类级别的扩展

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

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

$.showName = function(){
   console.log( 'ghostwu' );
  }
  $.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元素,绑定事件之后,就可以调用这个方法,显示按钮的值 "点我",在实际插件开发中,常用的就是这种.接下来,我们就用这种扩展机制开发一个简单的选项卡插件:

jquery插件开发之选项卡制作详解

页面布局与样式:

<!DOCTYPE html>
<html lang="en">
<head>
 <meta charset="UTF-8">
 <meta name="viewport" content="width=device-width, initial-scale=1.0">
 <meta http-equiv="X-UA-Compatible" content="ie=edge">
 <title>Document</title>
 <script src="https://cdn.bootcss.com/jquery/1.12.0/jquery.js"></script>
 <style>
  #tab {
   width:400px;
   height:30px;
  }
  #tab li, #tab ul {
   list-style-type:none;
  }
  #tab ul {
   width:400px;
   height: 30px;
   border-bottom:1px solid #ccc;
   line-height: 30px;
  }
  #tab ul li {
   float:left;
   margin-left: 20px;
   padding:0px 10px;
  }
  #tab ul li.active {
   background: yellow;
  }
  #tab ul li a {
   text-decoration: none;
   color:#666;
  }
  #tab div {
   width:400px;
   height:350px;
   background-color:#ccc;
  }
  .clearfix:after{
   content: '';
   display: block;
   clear: both;
   height: 0;
   visibility: hidden;
  }
 </style>
 <script src="tab2.js"></script>
 <script>
  $(function(){
   $("#tab").tabs( { evType : 'mouseover' } );
  });
 </script>
</head>
<body>
 <div id="tab">
  <ul class="clearfix">
   <li><a href="#tab1">选项1</a></li>
   <li><a href="#tab2">选项2</a></li>
   <li><a href="#tab3">选项3</a></li>
  </ul>
  <div id="tab1">作者:ghostwu(1)
   <div>博客: http://www.cnblogs.com/ghostwu/</div>
  </div>
  <div id="tab2">作者:ghostwu(2)
   <div>博客: http://www.cnblogs.com/ghostwu/</div>
  </div>
  <div id="tab3">作者:ghostwu(3)
   <div>博客: http://www.cnblogs.com/ghostwu/</div>
  </div>
 </div>
</body>
</html>

tab2.js文件

;(function ($) {
 $.fn.tabs = function (opt) {
  var def = { evType: "click" }; //定义了一个默认配置
  var opts = $.extend({}, def, opt);
  var obj = $(this);

  $("ul li:first", obj).addClass("active");
  obj.children("div").hide();
  obj.children("div").eq(0).show();

  $("ul li", obj).bind(opts.evType, function () {
   $(this).attr("class", "active").siblings("li").attr("class","");
   var id = $(this).find("a").attr("href").substring(1);
   obj.children("div").hide();
   $("#" + id, obj).show();
  });
 };
})(jQuery);

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

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

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

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

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

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

jQuery 相关文章推荐
jQuery插件FusionCharts实现的Marimekko图效果示例【附demo源码】
Mar 24 jQuery
jQuery实现分页功能(含ajax请求、后台数据、附完整demo)
Apr 03 jQuery
jQuery鼠标悬停内容动画切换效果
Apr 27 jQuery
jQuery 利用ztree实现树形表格的实例代码
Sep 27 jQuery
jQuery简单实现向列表动态添加新元素的方法示例
Dec 25 jQuery
js和jQuery以及easyui实现对下拉框的指定赋值方法
Jan 23 jQuery
超好用的jQuery分页插件jpaginate用法示例【附源码下载】
Dec 06 jQuery
jquery实现垂直无限轮播的方法分析
Jul 16 jQuery
jQuery 筛选器简单操作示例
Oct 02 jQuery
jquery插件懒加载的示例
Oct 24 jQuery
JS+JQuery实现无缝连接轮播图
Dec 30 jQuery
jquery插件实现搜索历史
Apr 24 jQuery
基于jQuery的左滑出现删除按钮的示例
Aug 29 #jQuery
jQuery实现简单的计时器功能实例分析
Aug 29 #jQuery
jQuery动态添加.active 实现导航效果代码思路详解
Aug 29 #jQuery
jQuery实现base64前台加密解密功能详解
Aug 29 #jQuery
jquery在vue脚手架中的使用方式示例
Aug 29 #jQuery
jQuery 实现鼠标画框并对框内数据选中的实例代码
Aug 29 #jQuery
jQuery实现锚点向下平滑滚动特效示例
Aug 29 #jQuery
You might like
PHP编程风格规范分享
2014/01/15 PHP
PHP中mysql_field_type()函数用法
2014/11/24 PHP
PHP学习笔记(二):变量详解
2015/04/17 PHP
详谈PHP程序Laravel 5框架的优化技巧
2016/07/18 PHP
tp5实现微信小程序多图片上传到服务器功能
2018/07/16 PHP
php-fpm重启导致的程序执行中断问题详解
2019/04/29 PHP
laravel中数据显示方法(默认值和下拉option默认选中)
2019/10/11 PHP
PHP 数组操作详解【遍历、指针、函数等】
2020/05/13 PHP
javascript之卸载鼠标事件的代码
2007/05/14 Javascript
JS 数字转换研究总结
2013/12/26 Javascript
JavaScript实现文本框中默认显示背景图片在获得焦点后消失的方法
2015/07/01 Javascript
JavaScript中函数(Function)的apply与call理解
2015/07/08 Javascript
js验证身份证号有效性并提示对应信息
2015/10/19 Javascript
Vue2.0权限树组件实现代码
2017/08/29 Javascript
浅谈在node.js进入文件目录的问题
2018/05/13 Javascript
解决bootstrap中下拉菜单点击后不关闭的问题
2018/08/10 Javascript
详解angular2.x创建项目入门指令
2018/10/11 Javascript
antd Upload 文件上传的示例代码
2018/12/14 Javascript
vue-cli的build的文件夹下没有dev-server.js文件配置mock数据的方法
2019/04/17 Javascript
一文了解vue-router之hash模式和history模式
2019/05/31 Javascript
javascript设计模式 ? 外观模式原理与用法实例分析
2020/04/15 Javascript
Python生成随机MAC地址
2015/03/10 Python
python实现字符串和日期相互转换的方法
2015/05/13 Python
Python中time模块和datetime模块的用法示例
2016/02/28 Python
详解Swift中属性的声明与作用
2016/06/30 Python
深入理解Python装饰器
2016/07/27 Python
Python 通过pip安装Django详细介绍
2017/04/28 Python
Python Numpy:找到list中的np.nan值方法
2018/10/30 Python
Python sep参数使用方法详解
2020/02/12 Python
基于python实现简单C/S模式代码实例
2020/09/14 Python
html5定制表单_动力节点Java学院整理
2017/07/11 HTML / CSS
马来西亚综合购物网站:Lazada马来西亚
2018/06/05 全球购物
英国票务网站:Ticketmaster英国
2018/08/27 全球购物
道德与公民自我评价
2015/03/09 职场文书
导游词之千岛湖
2019/09/23 职场文书
自制短波长线天线频率预选器 - 成功消除B2K之流的镜像
2021/04/22 无线电