jQuery插件 tabBox实现代码


Posted in Javascript onFebruary 09, 2010

查了一下jq的官方插件编写文档(http://docs.jquery.com/Plugins/Authoring)以及文档中推荐的Mike Alsup写的一篇A Plugin Development Pattern。英语不是很好,但还是努力看下来(既学习到知识又能练习英语,何乐不为),照猫画虎的写了一个处女作——tabBox。

顾名思义,这个插件就是方便的产生具有tab选项卡功能“盒子”的。看图一下就明白
jQuery插件 tabBox实现代码
这样功能在网页上是非常肠炎宁个的,不论前台后台。

在这,我首先提供了3个参数用于自定义插件,

$.fn.tabBox.defaults = { 
width : 260, 
height : 200, 
basePath : "tabBox/" 
};

width和height定义“盒子”的宽度和高度,basePath用于定义使用插件的页面对插件文件夹的相对路径。这个选项的出现时不得已而为之,因为选项卡的样式中用到了图片,而必须要有一个基准路径才能正确找到图片的路径。这也是参照了一个叫jqtransform(http://www.dfc-e.com/metiers/multimedia/opensource/jqtransform/)的插件的做法,他也有个参数用于指定图片文件夹所在的位置。当然还有一种做法,就是想WebUI(http://www.jqueryui.com/)一样,样式写到css文件里,这样图片的引用就是先对与css文件的路径了,而这两个都是插件的组成部分,相对路劲是不变的。所以不用提供这个路径了。只是由于这个插件用到的样式比较少,所以没有采用这个方法。

插件的原理很简单,核心的函数就是一个render(),用于渲染出tab的样式:

$.fn.tabBox.render = function() { 
$(".tabBox").css({ 
width : $.fn.tabBox.defaults.width+"px", 
height : $.fn.tabBox.defaults.height+"px", 
position : "relative", 
border : "1px #ccc solid", 
background : "url("+$.fn.tabBox.defaults.basePath+"tabHead.gif) top left repeat-x" 
}); 
$(".tabBox h2").each(function(i){ 
$(this).css({ 
width : "80px", 
height : "30px", 
position : "absolute", 
"border-top" : "none", 
cursor : "pointer", 
left : 10+(i*80), 
background : "url("+$.fn.tabBox.defaults.basePath+"tabNormal.gif) top right no-repeat", 
"text-align" : "center", 
"font-size" : "12px", 
"font-weight" : "normal", 
color : "#06c", 
"line-height" : "22px" 
}); 
}); 
$(".tabBox div").each(function(){ 
$(this).css({ 
width : $.fn.tabBox.defaults.width+"px", 
height : ($.fn.tabBox.defaults.height-30)+"px", 
display : "none", 
position : "absolute", 
top : "30px" 
}); 
}); 
$(".tabBox h2.curTab").css({ 
background : "url("+$.fn.tabBox.defaults.basePath+"tabCurTab.gif) top center no-repeat", 
"font-weight" : "bolder" 
}); 
$(".tabBox h2.curTab + div").css({ 
display : "block" 
}); 
};

可以看到这个函数全都是设置样式的代码,(也让我体验了一下用jq设置css的快感,依然记得e.style.backgroud的时代~),这个函数保证了显示当前被激活的标签和对应的信息。另外,通过捕捉tab选项卡的click事件来改变当前的激活标签,再渲染一次就可以了。
$(".tabBox h2").click(function(){ 
$(".tabBox h2").removeClass("curTab"); 
$(this).addClass("curTab"); 
$.fn.tabBox.render(); 
});

写完之后的一点思考:

1、对插件自定义选项的做法看不太懂

// build main options before element iteration 
var opts = $.extend({}, $.fn.tabBox.defaults, options); 
// iterate and reformat each matched element 
return this.each(function() { 
$this = $(this); 
// build element specific options 
var o = $.meta ? $.extend({}, opts, $this.data()) : opts;

这差不多是从Mike Alsup的文章中照搬过来的。照他的说法,好像是可以自定义整个插件的选项,还可以定义某一个特定元素的选项,可我试了一下,似乎不可以~。难道是我没看懂他说的?

2、目前tab是捕捉click事件的,我想加强一下,可以自定义是捕捉click还是mouseover,是的,可以写两个事件处理函数。但怎么样来通过配置决定调用哪个处理程序呢?
打包下载

Javascript 相关文章推荐
JQuery 图片的展开和伸缩实例讲解
Apr 18 Javascript
JavaScript中最简洁的编码html字符串的方法
Oct 11 Javascript
Bootstrap媒体对象的实现
May 01 Javascript
Bootstrap3使用typeahead插件实现自动补全功能
Jul 07 Javascript
JS图片放大效果简单实现代码
Sep 08 Javascript
微信小程序  audio音频播放详解及实例
Nov 02 Javascript
原生js实现键盘控制div移动且解决停顿问题
Dec 05 Javascript
javascript 中关于array的常用方法详解
May 05 Javascript
webpack 样式加载的实现原理
Jun 12 Javascript
微信小程序模拟cookie的实现
Jun 20 Javascript
微信小程序form表单组件示例代码
Jul 15 Javascript
解决vue watch数据的方法被调用了两次的问题
Nov 07 Javascript
基于Jquery的简单&简陋Tabs插件代码
Feb 09 #Javascript
JQUERY操作JSON实例代码
Feb 09 #Javascript
JQuery 获得绝对,相对位置的坐标方法
Feb 09 #Javascript
ExtJs 3.1 XmlTreeLoader Example Error
Feb 09 #Javascript
Javascript 获取链接(url)参数的方法[正则与截取字符串]
Feb 09 #Javascript
一个XML格式数据转换为图表的例子
Feb 09 #Javascript
javascript 解析url的search方法
Feb 09 #Javascript
You might like
php feof用来识别文件末尾字符的方法
2010/08/01 PHP
Zend Framework 2.0事件管理器(The EventManager)入门教程
2014/08/11 PHP
PHP常用处理静态操作类
2015/04/03 PHP
PHP实现与java 通信的插件使用教程
2019/08/11 PHP
jquery ajax return没有返回值的解决方法
2011/10/20 Javascript
jQuery中setTimeout的几种使用方法小结
2013/04/07 Javascript
js如何判断用户是否是用微信浏览器
2014/06/05 Javascript
jQuery搜索同辈元素方法
2015/02/10 Javascript
浅析JS中对函数function的理解(基础篇)
2016/10/14 Javascript
Node.js包管理器Yarn的入门介绍与安装
2016/10/17 Javascript
JavaScript & jQuery完美判断图片是否加载完毕
2017/01/08 Javascript
weex slider实现滑动底部导航功能
2017/08/28 Javascript
Vue数据双向绑定原理及简单实现方法
2018/05/18 Javascript
Bootstrap Fileinput 4.4.7文件上传实例详解
2018/07/25 Javascript
如何在postman中添加cookie信息步骤解析
2020/06/30 Javascript
Vue实现腾讯云点播视频上传功能的实现代码
2020/08/17 Javascript
Vue中的nextTick作用和几个简单的使用场景
2021/01/25 Vue.js
[56:00]2018DOTA2亚洲邀请赛 4.6 淘汰赛 VP vs TNC 第二场
2018/04/10 DOTA
python 按照固定长度分割字符串的方法小结
2018/04/30 Python
Python操作mongodb数据库进行模糊查询操作示例
2018/06/09 Python
python pillow模块使用方法详解
2019/08/30 Python
使用pyshp包进行shapefile文件修改的例子
2019/12/06 Python
Python for循环与getitem的关系详解
2020/01/02 Python
Python第三方包之DingDingBot钉钉机器人
2020/04/09 Python
python合并多个excel文件的示例
2020/09/23 Python
python mock测试的示例
2020/10/19 Python
python的dict判断key是否存在的方法
2020/12/09 Python
Notino希腊:购买香水和美容产品
2019/07/25 全球购物
爱护公共设施倡议书
2014/08/29 职场文书
销售人才自我评价范文
2014/09/27 职场文书
个人先进事迹总结
2015/02/26 职场文书
2015年学校少先队工作总结
2015/07/20 职场文书
2016年教师党员创先争优承诺书
2016/03/24 职场文书
大学生如何逃脱“毕业季创业队即散伙”魔咒?
2019/08/19 职场文书
mybatis 解决从列名到属性名的自动映射失败问题
2021/06/30 Java/Android
mapstruct的用法之qualifiedByName示例详解
2022/04/06 Java/Android