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 相关文章推荐
在IE6下发生Internet Explorer cannot open the Internet site错误
Jun 21 Javascript
jQuery调用AJAX时Get和post公用的乱码解决方法实例说明
Jun 04 Javascript
页面元素绑定jquery toggle后元素隐藏的解决方法
Mar 27 Javascript
JQuery.get提交页面不跳转的解决方法
Jan 13 Javascript
浅析JavaScript中的array数组类型系统
Jul 18 Javascript
jQuery制作圣诞主题页面 更像是爱情影集
Aug 10 Javascript
AngularJs验证重复密码的方法(两种)
Nov 25 Javascript
vue分类筛选filter方法简单实例
Mar 30 Javascript
ES6中新增的Object.assign()方法详解
Sep 22 Javascript
微信小程序通过保存图片分享到朋友圈功能
May 24 Javascript
微信小程序利用swiper+css实现购物车商品删除功能
Mar 06 Javascript
vue + elementUI实现省市县三级联动的方法示例
Oct 29 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
ThinkPHP表单自动验证实例
2014/10/13 PHP
php使用iconv中文截断问题的解决方法
2015/02/11 PHP
10个php函数实用却不常见
2015/10/13 PHP
中高级PHP程序员应该掌握哪些技术?
2016/09/23 PHP
php连接mysql数据库
2017/03/21 PHP
彻底搞懂PHP 变量结构体
2017/10/11 PHP
js实现的点击div区域外隐藏div区域
2014/06/30 Javascript
JavaScript的jQuery库中function的存在和参数问题
2015/08/13 Javascript
js支持键盘控制的左右切换立体式图片轮播效果代码分享
2015/08/26 Javascript
jquery实现全选和全不选功能效果的实现代码【推荐】
2016/05/05 Javascript
nodejs微信公众号支付开发
2016/09/19 NodeJs
微信小程序 加载 app-service.js 错误解决方法
2016/10/12 Javascript
vue中eventbus被多次触发以及踩过的坑
2017/12/02 Javascript
详解VueJS应用中管理用户权限
2018/02/02 Javascript
vue调试工具vue-devtools安装及使用方法
2018/11/07 Javascript
使用webpack搭建vue环境的教程详解
2019/12/31 Javascript
VUE UPLOAD 通过ACTION返回上传结果操作
2020/09/07 Javascript
详解JavaScript 的执行机制
2020/09/18 Javascript
[42:32]DOTA2上海特级锦标赛B组资格赛#2 Fnatic VS Spirit第二局
2016/02/27 DOTA
Python读取键盘输入的2种方法
2015/06/16 Python
python 随机数使用方法,推导以及字符串,双色球小程序实例
2017/09/12 Python
在Python中分别打印列表中的每一个元素方法
2018/11/07 Python
通过pykafka接收Kafka消息队列的方法
2018/12/27 Python
Python批量删除只保留最近几天table的代码实例
2019/04/01 Python
Python如何基于smtplib发不同格式的邮件
2019/12/30 Python
python海龟绘图之画国旗实例代码
2020/11/11 Python
Python3 用matplotlib绘制sigmoid函数的案例
2020/12/11 Python
美国流行背包品牌:JanSport(杰斯伯)
2018/03/02 全球购物
世界上最大的罕见唱片、CD和音乐纪念品网上商店:991.com
2018/05/03 全球购物
澳大利亚天然护肤品、化妆品和健康产品一站式商店:Nourished Life
2018/12/02 全球购物
事业单位分类改革实施方案
2014/03/21 职场文书
改进作风怎么办发言材料
2014/08/17 职场文书
银行先进个人总结
2015/02/15 职场文书
辞职信的写法
2015/02/27 职场文书
幼儿园毕业典礼家长致辞
2015/07/29 职场文书
MySQL 用 limit 为什么会影响性能
2021/09/15 MySQL