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 相关文章推荐
Spring shiro + bootstrap + jquery.validate 实现登录、注册功能
Jun 02 jQuery
jQuery+HTML5实现WebGL高性能烟花绽放动画效果【附demo源码下载】
Aug 18 jQuery
JS和JQuery实现雪花飘落效果
Nov 30 jQuery
js和jQuery以及easyui实现对下拉框的指定赋值方法
Jan 23 jQuery
jQuery实现滚动到底部时自动加载更多的方法示例
Feb 18 jQuery
jQuery实现的电子时钟效果完整示例
Apr 28 jQuery
关于jquery中attr()和prop()方法的区别
May 28 jQuery
Angular5中调用第三方库及jQuery的添加的方法
Jun 07 jQuery
jQuery实现数字华容道小游戏(实例代码)
Jan 16 jQuery
jquery实现手风琴案例
May 04 jQuery
jquery+css3实现的经典弹出层效果示例
May 16 jQuery
jquery插件实现轮播图效果
Oct 19 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脚本数据库功能详解(下)
2006/10/09 PHP
一个取得文件扩展名的函数
2006/10/09 PHP
linux实现php定时执行cron任务详解
2013/12/24 PHP
用Zend Studio+PHPnow+Zend Debugger搭建PHP服务器调试环境步骤
2014/01/19 PHP
推荐一款MAC OS X 下php集成开发环境mamp
2014/11/08 PHP
php异步多线程swoole用法实例
2014/11/14 PHP
php解析xml 的四种简单方法(附实例)
2016/07/11 PHP
php结合ajax实现手机发红包的案例
2016/10/13 PHP
PHP 验证身份证是否合法的函数
2017/02/09 PHP
JavaScript删除数组元素的方法
2015/03/20 Javascript
初步认识JavaScript函数库jQuery
2015/06/18 Javascript
JavaScript中Object.prototype.toString方法的原理
2016/02/24 Javascript
详解vue-router 2.0 常用基础知识点之router-link
2017/05/10 Javascript
angularJS模态框$modal实例代码
2017/05/27 Javascript
JS基于封装函数实现的表格分页完整示例
2018/06/26 Javascript
微信小程序视图控件与bindtap之间的问题的解决
2019/04/08 Javascript
Vue实现导航栏菜单
2020/08/19 Javascript
[02:20]DOTA2英雄基础教程 黑暗贤者
2013/12/19 DOTA
Python OpenCV处理图像之滤镜和图像运算
2018/07/10 Python
浅谈numpy生成数组的零值问题
2018/11/12 Python
在Python中将函数作为另一个函数的参数传入并调用的方法
2019/01/22 Python
python使用matplotlib绘制雷达图
2019/10/18 Python
如何通过Python3和ssl实现加密通信功能
2020/05/09 Python
Python如何实现FTP功能
2020/05/28 Python
python的json包位置及用法总结
2020/06/21 Python
简单了解如何封装自己的Python包
2020/07/08 Python
HTML5 Canvas API中drawImage()方法的使用实例
2016/03/25 HTML / CSS
芬兰灯具网上商店:Nettilamppu.fi
2018/06/30 全球购物
What's the difference between an interface and abstract class? (接口与抽象类有什么区别)
2012/10/29 面试题
自荐信如何“自荐”
2013/10/24 职场文书
上班睡觉检讨书
2014/01/09 职场文书
大型车展策划方案
2014/02/01 职场文书
党员公开承诺书
2014/03/25 职场文书
2014年大学生工作总结
2014/11/20 职场文书
监理中标通知书
2015/04/16 职场文书
openEuler 搭建java开发环境的详细过程
2022/06/10 Servers