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 EasyUI API 中文文档 - ComboTree组合树
Oct 11 Javascript
jQuery操作input type=radio的实现代码
Jun 14 Javascript
JavaScript原生对象之Number对象的属性和方法详解
Mar 13 Javascript
JavaScript使用Math.Min返回两个数中较小数的方法
Apr 06 Javascript
Bootstrap每天必学之按钮(一)
Nov 24 Javascript
jquery插件之文字间歇自动向上滚动效果代码
Feb 25 Javascript
jQuery中deferred对象使用方法详解
Jul 14 Javascript
纯原生js实现table表格的增删
Jan 05 Javascript
jQuery树控件zTree使用方法详解(一)
Feb 28 Javascript
高性能js数组去重(12种方法,史上最全)
Dec 21 Javascript
5种 JavaScript 方式实现数组扁平化
Oct 05 Javascript
JS实现数组去重的11种方法总结
Apr 04 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
php5 图片验证码实现代码
2009/12/11 PHP
php后台如何避免用户直接进入方法实例
2013/10/15 PHP
那些年我们错过的魔术方法(Magic Methods)
2014/01/14 PHP
PHP中文乱码解决方案
2015/03/05 PHP
借用Google的Javascript API Loader来加速你的网站
2009/01/28 Javascript
javascript 设为首页与加入收藏兼容多浏览器代码
2011/01/11 Javascript
js的正则test,match,exec详细解析
2014/01/29 Javascript
jQuery操作动态生成的内容的方法
2016/05/28 Javascript
微信小程序 生命周期和页面的生命周期详细介绍
2017/01/19 Javascript
获取IE浏览器Cookie信息的方法
2017/01/23 Javascript
基于JavaScript实现复选框的全选和取消全选
2017/02/09 Javascript
总结js中的一些兼容性易错的问题
2017/12/18 Javascript
JavaScript实现动态添加、移除元素或属性的方法分析
2019/01/03 Javascript
Node.js + express基本用法教程
2019/03/14 Javascript
Vue2.0使用嵌套路由实现页面内容切换/公用一级菜单控制页面内容切换(推荐)
2019/05/08 Javascript
微信小程序实现的picker多级联动功能示例
2019/05/23 Javascript
JavaScript遍历数组的方法代码实例
2020/01/14 Javascript
node运行js获得输出的三种方式示例详解
2020/07/02 Javascript
js实现简单商品筛选功能
2021/02/02 Javascript
[05:15]2018年度CS GO社区贡献奖-完美盛典
2018/12/16 DOTA
Django1.7+python 2.78+pycharm配置mysql数据库教程
2014/11/18 Python
python操作ssh实现服务器日志下载的方法
2015/06/03 Python
python下调用pytesseract识别某网站验证码的实现方法
2016/06/06 Python
浅谈Python 列表字典赋值的陷阱
2019/01/20 Python
详解Python字典的操作
2019/03/04 Python
python 计算一个字符串中所有数字的和实例
2019/06/11 Python
Tensorflow之梯度裁剪的实现示例
2020/03/08 Python
利用python实现凯撒密码加解密功能
2020/03/31 Python
使用Pycharm(Python工具)新建项目及创建Python文件的教程
2020/04/26 Python
通过代码实例解析Pytest运行流程
2020/08/20 Python
巴西女装购物网站:Eclectic
2018/04/24 全球购物
新闻专业应届生求职信
2013/10/31 职场文书
幼儿园六一亲子活动方案
2014/08/26 职场文书
运动会稿件100字
2014/09/24 职场文书
2016年感恩节活动总结大全
2016/04/01 职场文书
解决jupyter notebook图片显示模糊和保存清晰图片的操作
2021/04/24 Python