jQuery Tab插件 用于在Tab中显示iframe,附源码和详细说明


Posted in Javascript onJune 27, 2011

作者: think8848(公司主页: http://www.cleversoft.com, QQ: 166156888, Blog: http://think8848.cnblogs.com)  转载请保留此信息


CleverTabs是一款jQuery插件,所需jQuery版本:1.6.1,jQuery UI样式版本:1.8.13;其功能为创建jQuery UI风格的Tab用于显示iframe。

本示例中符加了jQuery.contextMenu插件,我修改了其样式,使用了jQuery UI的皮肤

效果如下图:

jQuery Tab插件 用于在Tab中显示iframe,附源码和详细说明
初级应用示例:
HTML代码:
<div id="tabs"><ul></ul></div>
Javascript代码:

<script type="text/javascript"> 
$(function () { 
tabs = $('#tabs').cleverTabs(); 
tabs.add({ 
url: 'https://3water.com', 
label: 'think8848' 
}); 
}); 
</script>

CleverTabs详细说明:
CleverTabs为所有Tab的容器
var tabs; 
<script type="text/javascript"> 
$(function () { 
tabs = $('#tabs').cleverTabs({ 
//是否安装右键菜单(默认: true) 
setupContextMenu: true, 
//右键菜单定义, 右键菜单功能由jquery.contextMenu插件提供 
//详见: http://abeautifulsite.net/2008/09/jquery-context-menu-plugin/ 
//本插件中对原contextMenu插件中的样式做了修改,使用了jQuery UI皮肤 
contextMenu: { 
element: $('#contextMenuElementId'), 
handler: function (action, el, pos) { /*do something...*/ } 
}, 
//开启Tab后是否锁定(不允许关闭,默认: false) 
lock: false, 
//开启Tab后是否禁用(不允许激活和操作iframe内容,默认: false) 
disable: false, 
//当tabs中只有一个Tab时,是否锁定该Tab(默认: true) 
lockOnlyOne: true, 
//显示iframe的容器(默认创建在tabs元素中) 
panelContainer: $('#panelContainerElementId')/*, 
其中 
tabHeaderTemplate: '', //(Tab用于控制的头模板) 
tabPanelTemplate: '', //(Tab用于显示的Panel模板) 
uidGenerator: function() {} //(Tab唯一id生成器) 
功能现在不启用,等有时间完善后再启用*/ 
}); 
tabs.add({ 
url: 'https://3water.com', 
label: 'think8848' 
}); 
}); 
</script>

CleverTabs.add方法:添加一个新的Tab并使之成为激活状态,如果将要添加的url已经存在,则会激活该Tab
<script type="text/javascript"> 
var tabs = ('#tabs').cleverTabs(); 
tabs.add({ 
//必须是在tabs内唯一的id 
id: 'uniqueId', 
//将要在iframe的src属性设置的值 
url: 'iframe.src', 
//显示在Tab头上的文字 
label: 'tab header', 
//关闭本Tab时需要刷新的Tab的url(默认: null) 
closeREfresh: 'tab url', 
//关闭本Tab时需要激活的Tab的url(默认: null) 
closeActivate: 'tab url', 
//关闭本Tab时需要执行的回调函数 
callback: function () { /*do something*/ } 
}); 
</script>

CleverTabs.getCurrentTab方法:
获取当前处于激活状态的Tab
<script type="text/javascript"> 
var tabs = ('#tabs').cleverTabs(); 
var tab = tabs.getCurrentTab(); 
</script>

CleverTabs.getTabByUrl方法:
获取指定url的Tab实例
<script type="text/javascript"> 
var tabs = ('#tabs').cleverTabs(); 
var tab = tabs.getTabByUrl('https://3water.com'); 
</script>

CleverTabs.clear方法:
关闭tabs内所有未锁定的Tab
<script type="text/javascript"> 
var tabs = ('#tabs').cleverTabs(); 
var tab = tabs.clear(); 
</script>

CleverTab.deactivate方法:
使Tab页面处于未激活状态,但不建议在代码中使用
CleverTab.prevTab方法:
获取该Tab之前的Tab
<script type="text/javascript"> 
var tabs = ('#tabs').cleverTabs(); 
var tab = tabs.getTabByUrl('https://3water.com'); 
var prevTab = tab.prevTab(); 
</script>

CleverTab.nextTab方法:
获取该Tab之后的Tab
<script type="text/javascript"> 
var tabs = ('#tabs').cleverTabs(); 
var tab = tabs.getTabByUrl('https://3water.com'); 
var prevTab = tab.nextTab(); 
</script>

CleverTab.kill方法:
从tabs中移移该Tab
<script type="text/javascript"> 
var tabs = ('#tabs').cleverTabs(); 
var tab = tabs.getTabByUrl('https://3water.com'); 
tab.kill(); 
</script>

CleverTab.refresh方法:
刷新该Tab的iframe中的内容
<script type="text/javascript"> 
var tabs = ('#tabs').cleverTabs(); 
var tab = tabs.getTabByUrl('https://3water.com'); 
tab.refresh(); 
</script>

CleverTab.setDisable方法:
设置该Tab的disabled属性,设置disabled为true后,自动设置该Tab的locked属性为true
<script type="text/javascript"> 
var tabs = ('#tabs').cleverTabs(); 
var tab = tabs.getTabByUrl('https://3water.com'); 
//参数true为禁用,false或不提供值为启用 
tab.setDisable(true); 
</script>

CleverTab.setLock方法:
设置该Tab的locked属性,设置locked为true后,该Tab的不允许关闭
<script type="text/javascript"> 
var tabs = ('#tabs').cleverTabs(); 
var tab = tabs.getTabByUrl('https://3water.com'); 
//参数true为锁定,false或不提供值为解锁 
tab.setLock(true); 
</script>

------------------------------2011.06.27 更新---------------------------------
"改变不了别人,就改变自已吧"
在现在的页面中,多数情况下都可能由几部分组成,比如:Banner,Navigator,Content等,而为了工作区域变的更大,很多时候诸如Banner,Navigator或者其他的Panel都会收起来(Collapse),这个时候问题来了,当初我给tabs定义了width: 80%; height: 90%; 现在tabs的width和height发生了变化,可是内部的Tab页面还没有收到这个变化,它还是按照之前的size显示呢,更要命的是resize事件居然只有window和body才有,div居然不支持此事件!真不知道他们是怎么想的...在之前的cleverTabs中,我绑定了window.resize事件,但是问题在于我上面举的例子中,window的size实际上没有发生变化,甚至body也没有,但是tabs的大小发生变化了,在这种情况下,如果您使用了默认的tabPenelContainer,那一定得处理tabs的resize事件,可是tabs就是一个div嘛,哪来的resize?昨晚在睡前突然想到个办法,既然能"改变不了别人,就改变自已",那么就能"自已处理不了的事,就交给别人去处理吧"。把resize“外包”出去算了。于是对原来的代码做了修改,在CleverTabs构造函数中,为CleverTabs的prototype添加了resizePanelContainer函数,tabs自已不知道发生了resize事件,但总归有人知道发生了,谁知道谁调用,所谓的能者多劳?
CleverTabs.resizePanelContainer方法:
当使用CleverTabs默认的PanelContainer时,重新设置PanelContainer的size。
<script type="text/javascript"> 
var tabs; 
$(function () { 
tabs = $('#tabs').cleverTabs(); 
$(window).bind('resize', function () { 
//当发生window.resize事件时,重新默认的tabs的PanelContainer的大小 
tabs.resizePanelContainer(); 
}); 
</script>

演示 http://demo.3water.com/js/2011/CleverTabs/index.htm
源码下载  /201106/yuanma/CleverTabs.rar
Javascript 相关文章推荐
JavaScript delete操作符应用实例
Jan 13 Javascript
js Array操作的最简短最容易理解方法
Dec 09 Javascript
jquery复选框多选赋值给文本框的方法
Jan 27 Javascript
JS绘制生成花瓣效果的方法
Aug 05 Javascript
js父页面中使用子页面的方法
Jan 09 Javascript
基于BootStrap的图片轮播效果展示实例代码
May 23 Javascript
bootstrap confirmation按钮提示组件使用详解
Aug 22 Javascript
js原生方法被覆盖,从新赋值原生的方法
Jan 02 Javascript
在vue项目创建的后初始化首次使用stylus安装方法分享
Jan 25 Javascript
vue使用ElementUI时导航栏默认展开功能的实现
Jul 04 Javascript
vue.js基于v-for实现批量渲染 Json数组对象列表数据示例
Aug 03 Javascript
vue实现导航标题栏随页面滚动渐隐渐显效果
Mar 12 Javascript
自定义一个jquery插件[鼠标悬浮时候 出现说明label]
Jun 27 #Javascript
读jQuery之十 事件模块概述
Jun 27 #Javascript
AeroWindow 基于JQuery的弹出窗口插件
Jun 27 #Javascript
jQuery表格行换色的三种实现方法
Jun 27 #Javascript
19个很有用的 JavaScript库推荐
Jun 27 #Javascript
Node.js:Windows7下搭建的Node.js服务(来玩玩服务器端的javascript吧,这可不是前端js插件)
Jun 27 #Javascript
Jsonp 跨域的原理以及Jquery的解决方案
Jun 27 #Javascript
You might like
CI框架在CLI下执行占用内存过大问题的解决方法
2014/06/17 PHP
Laravel使用Queue队列的技巧汇总
2019/09/02 PHP
jquery ajax例子返回值详解
2012/09/11 Javascript
jquery滚动组件(vticker.js)实现页面动态数据的滚动效果
2013/07/03 Javascript
jQuery给动态添加的元素绑定事件的方法
2015/03/09 Javascript
javascript中传统事件与现代事件
2015/06/23 Javascript
非常实用的12个jquery代码片段
2015/11/02 Javascript
省市联动效果的简单实现代码(推荐)
2016/06/06 Javascript
layui选项卡效果实现代码
2017/05/19 Javascript
Angular4实现动态添加删除表单输入框功能
2017/08/11 Javascript
手写Node静态资源服务器的实现方法
2018/03/20 Javascript
详解Angular操作cookies方法
2018/06/01 Javascript
利用hasOwnProperty给数组去重的面试题分享
2018/11/05 Javascript
KOA+egg.js集成kafka消息队列的示例
2018/11/09 Javascript
微信小程序显示倒计时功能示例【测试可用】
2018/12/03 Javascript
使用Layer组件弹出多个对话框(非嵌套)与关闭及刷新的例子
2019/09/25 Javascript
vue根据条件不同显示不同按钮的操作
2020/08/04 Javascript
vue在App.vue文件中监听路由变化刷新页面操作
2020/08/14 Javascript
[01:14:35]DOTA2上海特级锦标赛B组资格赛#1 Alliance VS Fnatic第一局
2016/02/26 DOTA
Python标准库内置函数complex介绍
2014/11/25 Python
Python操作Access数据库基本步骤分析
2016/09/19 Python
python统计多维数组的行数和列数实例
2018/06/23 Python
python实现单链表中删除倒数第K个节点的方法
2018/09/28 Python
python 经典数字滤波实例
2019/12/16 Python
Python实现图像去噪方式(中值去噪和均值去噪)
2019/12/18 Python
使用tensorflow显示pb模型的所有网络结点方式
2020/01/23 Python
Django nginx配置实现过程详解
2020/09/10 Python
html5调用app分享功能示例(WebViewJavascriptBridge)
2018/03/21 HTML / CSS
国外平面设计素材网站:The Hungry JPEG
2017/03/28 全球购物
德国自行车商店:Tretwerk
2019/06/21 全球购物
英文版银行求职信
2013/10/09 职场文书
升职自荐书范文
2013/11/28 职场文书
关于清明节的演讲稿
2014/09/13 职场文书
党的群众路线教育实践活动个人自我剖析材料
2014/10/07 职场文书
中学生思想品德评语
2014/12/31 职场文书
撤诉状格式范本
2015/05/19 职场文书