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 相关文章推荐
Javascript操纵Cookie实现购物车程序
Feb 15 Javascript
修改file按钮的默认样式实现代码
Apr 23 Javascript
利用javascript实现web页面中指定区域打印
Oct 30 Javascript
一个js控制的导航菜单实例代码
Dec 03 Javascript
form表单action提交的js部分与html部分
Jan 07 Javascript
jquery带翻页动画的电子杂志代码分享
Aug 21 Javascript
创建基于Bootstrap的下拉菜单的DropDownList的JQuery插件
Jun 02 Javascript
AngularJS基础 ng-src 指令简单示例
Aug 03 Javascript
利用jQuery实现打字机字幕效果实例代码
Sep 02 Javascript
axios对请求各种异常情况处理的封装方法
Sep 25 Javascript
使用FormData实现上传多个文件
Dec 04 Javascript
解决vue+ element ui 表单验证有值但验证失败问题
Jan 16 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的autoload自动加载机制使用说明
2010/12/28 PHP
php 获取SWF动画截图示例代码
2014/02/10 PHP
基于命令行执行带参数的php脚本并取得参数的方法
2016/01/25 PHP
asp.net下使用jquery 的ajax+WebService+json 实现无刷新取后台值的实现代码
2010/09/19 Javascript
JavaScript游戏之优化篇
2010/11/08 Javascript
网页源代码保护(禁止右键、复制、另存为、查看源文件)
2012/05/23 Javascript
图片动画横条广告带上下滚动可自定义图片、链接等等
2013/10/20 Javascript
javascript学习笔记(六)数据类型和JSON格式
2014/10/08 Javascript
JavaScript显示当前文档最后修改日期的方法
2015/03/19 Javascript
详解JS对象封装的常用方式
2016/12/30 Javascript
JavaScript实现的select点菜功能示例
2017/01/16 Javascript
详解javascript立即执行函数表达式IIFE
2017/02/13 Javascript
js上下视差滚动简单实现代码
2017/03/07 Javascript
详解angularjs利用ui-route异步加载组件
2017/05/21 Javascript
jquery应用实例分享_实现手风琴特效
2018/02/01 jQuery
.vue文件 加scoped 样式不起作用的解决方法
2018/05/28 Javascript
vue组件从开发到发布的实现步骤
2018/11/11 Javascript
Nodejs实现用户注册功能
2019/04/14 NodeJs
layui树形菜单动态遍历的例子
2019/09/23 Javascript
vue中监听路由参数的变化及方法
2019/12/06 Javascript
Postman参数化实现过程及原理解析
2020/08/13 Javascript
Python的动态重新封装的教程
2015/04/11 Python
python matplotlib 注释文本箭头简单代码示例
2018/01/08 Python
异步任务队列Celery在Django中的使用方法
2018/06/07 Python
详解Python中字符串前“b”,“r”,“u”,“f”的作用
2019/12/18 Python
python GUI库图形界面开发之PyQt5日期时间控件QDateTimeEdit详细使用方法与实例
2020/02/27 Python
JupyterNotebook 输出窗口的显示效果调整方法
2020/04/13 Python
简单了解Python变量作用域正确使用方法
2020/06/12 Python
购买200个世界上最好的内衣品牌:Bare Necessities
2017/02/11 全球购物
测绘工程个人的自我评价
2013/11/23 职场文书
庆元旦广播稿
2014/02/10 职场文书
戒毒悔改检讨书
2014/09/21 职场文书
工商局副局长个人对照检查材料
2014/09/25 职场文书
学校艾滋病宣传活动总结
2015/05/09 职场文书
旅行社计调工作总结
2015/08/12 职场文书
AI:如何训练机器学习的模型
2021/04/16 Python