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 21 Javascript
高效率JavaScript编写技巧整理
Aug 23 Javascript
jquery mobile changepage的三种传参方法介绍
Sep 13 Javascript
jquery ajax对特殊字符进行转义防止js注入使用示例
Nov 21 Javascript
点击表单提交时出现jQuery没有权限的解决方法
Jul 23 Javascript
DOM基础教程之使用DOM控制表单
Jan 20 Javascript
javaScript语法总结
Nov 25 Javascript
JavaScript用二分法查找数据的实例代码
Jun 17 Javascript
微信小程序实现左滑修改、删除功能
Oct 19 Javascript
详解JS取出两个数组中的不同或相同元素
Mar 20 Javascript
微信小程序网络层封装的实现(promise, 登录锁)
May 08 Javascript
uniapp开发打包多端应用完整方法指南
Dec 24 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安装全攻略:APACHE
2006/10/09 PHP
10个简化PHP开发的工具
2014/12/25 PHP
php猜单词游戏
2015/09/29 PHP
json跟xml的对比分析
2008/06/10 Javascript
javascript instanceof 内部机制探析
2010/10/15 Javascript
Uglifyjs(JS代码优化工具)入门 安装使用
2020/04/13 Javascript
javascript实现密码验证
2015/11/10 Javascript
JS设置下拉列表框当前所选值的方法
2015/12/22 Javascript
Bootstrap table分页问题汇总
2016/05/30 Javascript
Bootstrap布局之栅格系统详解
2016/06/13 Javascript
DIV+CSS+jQ实现省市联动可扩展
2016/06/22 Javascript
从vue源码解析Vue.set()和this.$set()
2018/08/30 Javascript
jQuery实现表格的增、删、改操作示例
2019/01/27 jQuery
[51:06]DOTA2-DPC中国联赛 正赛 Elephant vs Aster BO3 第二场 1月26日
2021/03/11 DOTA
举例讲解Django中数据模型访问外键值的方法
2015/07/21 Python
基于Python和Scikit-Learn的机器学习探索
2017/10/16 Python
python的unittest测试类代码实例
2017/12/07 Python
Python中循环后使用list.append()数据被覆盖问题的解决
2018/07/01 Python
python看某个模块的版本方法
2018/10/16 Python
对Python3中dict.keys()转换成list类型的方法详解
2019/02/03 Python
python如何实现视频转代码视频
2019/06/17 Python
Python远程开发环境部署与调试过程图解
2019/12/09 Python
Keras 使用 Lambda层详解
2020/06/10 Python
Python识别验证码的实现示例
2020/09/30 Python
CSS3中31种选择器使用方法教程
2013/12/05 HTML / CSS
使用phonegap创建联系人的实现方法
2017/03/30 HTML / CSS
意大利火车票和铁路通行证专家:ItaliaRail
2019/01/22 全球购物
大学生的应聘自我评价
2013/12/13 职场文书
餐饮业会计岗位职责
2013/12/19 职场文书
自我鉴定书面格式
2014/01/13 职场文书
个人委托书如何写
2014/09/25 职场文书
健康状况证明书
2014/11/26 职场文书
行政二审代理词
2015/05/25 职场文书
卢旺达饭店观后感
2015/06/05 职场文书
公司行政管理制度范本
2015/08/05 职场文书
导游词之阆中古城
2019/12/23 职场文书