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库还是自己写代码?
Jan 28 Javascript
javascript验证身份证号
Mar 03 Javascript
jQuery往textarea中光标所在位置插入文本的方法
Jun 26 Javascript
jQuery实现的分子运动小球碰撞效果
Jan 27 Javascript
Angular 5.0 来了! 有这些大变化
Nov 15 Javascript
JS组件系列之Gojs组件 前端图形化插件之利器
Nov 29 Javascript
详解React+Koa实现服务端渲染(SSR)
May 23 Javascript
微信小程序自定义prompt组件步骤详解
Jun 12 Javascript
vue-cli history模式实现tomcat部署报404的解决方式
Sep 06 Javascript
通过实例了解Javascript柯里化流程
Mar 03 Javascript
vue 组件简介
Jul 31 Javascript
vue ant design 封装弹窗表单的使用
Jun 01 Vue.js
基于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和js交互一例-PHP教程,PHP应用
2007/01/03 PHP
Zend framework处理一个http请求的流程分析
2010/02/08 PHP
PHP中ob_start函数的使用说明
2013/11/11 PHP
PHP调试函数和日志记录函数分享
2015/01/31 PHP
php数组转成json格式的方法
2015/03/09 PHP
PHP Yii框架之表单验证规则大全
2015/11/16 PHP
php封装好的人民币数值转中文大写类
2015/12/20 PHP
Yii遍历行下每列数据的方法
2016/10/17 PHP
PHP利用二叉堆实现TopK-算法的方法详解
2017/04/24 PHP
yii框架结合charjs实现统计30天数据的方法
2020/04/04 PHP
PHP dirname(__FILE__)原理及用法解析
2020/10/28 PHP
javascript生成随机大小写字母的方法
2014/02/20 Javascript
对之前写的jquery分页做下升级
2014/06/19 Javascript
分享jQuery插件的学习笔记
2016/01/14 Javascript
JS面向对象(3)之Object类,静态属性,闭包,私有属性, call和apply的使用,继承的三种实现方法
2016/02/25 Javascript
微信js-sdk地理位置接口用法示例
2016/10/12 Javascript
JavaScript 程序错误Cannot use 'in' operator to search的解决方法
2017/07/10 Javascript
通过源码分析Vue的双向数据绑定详解
2017/09/24 Javascript
create-react-app使用antd按需加载的样式无效问题的解决
2019/02/26 Javascript
vscode配置vue下的es6规范自动格式化详解
2019/03/20 Javascript
如何在微信小程序中使用骨架屏的步骤
2020/06/12 Javascript
浅谈Vue 自动化部署打包上线
2020/06/14 Javascript
[01:22:28]DOTA2-DPC中国联赛 正赛 SAG vs RNG BO3 第一场 1月18日
2021/03/11 DOTA
python3写爬取B站视频弹幕功能
2017/12/22 Python
python字典排序的方法
2019/10/12 Python
PyQt5 控件字体样式等设置的实现
2020/05/13 Python
python两个list[]相加的实现方法
2020/09/23 Python
html5读取本地文件示例代码
2014/04/22 HTML / CSS
节能减排倡议书
2014/04/15 职场文书
答谢会策划方案
2014/05/12 职场文书
应届生求职信
2014/05/31 职场文书
加强作风建设心得体会
2014/10/22 职场文书
作文评语怎么写
2014/12/25 职场文书
2015年乡镇流动人口工作总结
2015/05/12 职场文书
高三英语教学反思
2016/03/03 职场文书
中学生打架《检讨书》范文
2019/08/12 职场文书