JavaScript浏览器选项卡效果


Posted in Javascript onAugust 25, 2010

有图如下:
JavaScript浏览器选项卡效果
代码如下:

/* 
head html : <span></span> 
body html : <iframe></iframe> 
*/ 
var Tab = function(id,title,url,isClose){ 
this.id = id; 
this.title = title; 
this.url = url; 
this.head = jQuery('<span class="tab-head">' + this.title +'</span>'); 
this.body = jQuery('<iframe name="ifm' + this.id +'" src="' + this.url +'" frameborder=0 class="tab-body"></iframe>').hide(); 
isClose && (this.close = jQuery('<span class="tab-head-closeBtn">×</span>'),this.closeBtn()); 
}; 
Tab.prototype = { 
closeBtn : function(){ 
var self = this; 
self.close.bind("mouseover",function(){ 
jQuery(this).addClass("tab-closeBtn-hover"); 
}); 
self.close.bind("mouseout",function(){ 
jQuery(this).removeClass("tab-closeBtn-hover"); 
}); 
self.head.append(self.close); 
}, 
getFocus : function(){ 
this.head.addClass("tab-head-active"); 
this.body.show(); 
}, 
loseFocus : function(){ 
this.head.removeClass("tab-head-active"); 
this.body.hide(); 
}, 
destory : function(){ 
this.head.remove(); 
this.body.remove(); 
}, 
}; 
/* 
head html : <div><span></span><span></span>...</div> 
body html : <div><iframe></iframe><iframe></iframe>...</div> 
*/ 
var TabView = function(container){ 
this.container = container; 
this.head = jQuery('<div class="tabView-head"></div>'); 
this.body = jQuery('<div class="tabView-body"></div>'); 
this.tabs = []; 
this.tabId = 0; 
this.focusTab = null; 
this.init(); 
}; 
TabView.prototype = { 
init : function(){ 
this.container.append(this.head).append(this.body); 
}, 
add : function(title,url,isClose){ 
var self = this; 
var tab = new Tab(self.tabId,title,url,isClose); 
self._tabEvents(tab); 
(self.tabs.length==0) && (tab.getFocus(),self.focusTab=tab); 
self.tabs.push(tab); 
self.head.append(tab.head); 
self.body.append(tab.body); 
self.tabId++; 
}, 
remove_ref : function(tab){ 
var self = this; 
for(var i=0;i<self.tabs.length;i++){ 
if(tab.id===self.tabs[i].id){ 
tab.destory(); 
self.tabs.splice(i,1); 
return i; 
} 
} 
return -1; 
}, 
destory : function(){ 
this.head.remove(); 
this.body.remove(); 
}, 
_tabEvents : function(tab){ 
var self = this; 
tab.head.bind("click",function(){ 
if(self.focusTab.id != tab.id){ 
tab.getFocus(); 
self.focusTab.loseFocus(); 
self.focusTab = tab; 
} 
}); 
tab.close && tab.close.bind("click",function(){ 
tab.destory(); 
var i = self.remove_ref(tab); 
if(tab.id==self.focusTab.id){//如果关闭的是当前的tab 
if(self.tabs.length==0){//如果所有tab都已关闭 
self.destory(); 
}else{ 
var nextIndex = self.tabs.length==i ? i-1 : i; 
self.focusTab = self.tabs[nextIndex]; 
self.focusTab.getFocus(); 
} 
} 
}); 
}, 
};
Javascript 相关文章推荐
写js时遇到的一些小问题
Dec 06 Javascript
自定义一个jquery插件[鼠标悬浮时候 出现说明label]
Jun 27 Javascript
定时器(setTimeout/setInterval)调用带参函数失效解决方法
Mar 26 Javascript
简单实用jquery版三级联动select示例
Jul 04 Javascript
原生JS实现表单checkbook获取已选择的值
Jul 21 Javascript
js数组操作学习总结
Nov 04 Javascript
js保留小数点后几位的写法
Jan 03 Javascript
纯javascript实现图片延时加载方法
Aug 21 Javascript
Bootstrap每天必学之导航
Nov 26 Javascript
Bootstrap源码解读下拉菜单(4)
Dec 23 Javascript
详解组件库的webpack构建速度优化
Jun 18 Javascript
Openlayers实现点闪烁扩散效果
Sep 24 Javascript
Javascript之旅 对象的原型链之由来
Aug 25 #Javascript
Javascript new关键字的玄机 以及其它
Aug 25 #Javascript
jquery下组织javascript代码(js函数化)
Aug 25 #Javascript
jquery实现居中弹出层代码
Aug 25 #Javascript
jquery下实现overlay遮罩层代码
Aug 25 #Javascript
在网页中使用document.write时遭遇的奇怪问题
Aug 24 #Javascript
javascript下string.format函数补充
Aug 24 #Javascript
You might like
DC《神奇女侠2》因疫情推迟上映 温子仁新恐怖片《恶性》撤档
2020/04/09 欧美动漫
浅谈ThinkPHP的URL重写
2014/11/25 PHP
php+html5实现无刷新图片上传教程
2016/01/22 PHP
php结合web uploader插件实现分片上传文件
2016/05/10 PHP
ThinkPHP开发--使用七牛云储存
2017/09/14 PHP
jQuery获取地址栏参数插件(模仿C#)
2010/10/26 Javascript
Javascript中定义方法的另类写法(批量定义js对象的方法)
2011/02/25 Javascript
为JavaScript类型增加方法的实现代码(增加功能)
2011/12/29 Javascript
Jquery命名冲突解决的五种方案分享
2012/03/16 Javascript
基于jQuery的公告无限循环滚动实现代码
2012/05/11 Javascript
使用jquery给新生的th绑定hover事件的实例
2017/02/10 Javascript
js 发布订阅模式的实例讲解
2017/09/10 Javascript
javascript字体颜色控件的开发 JS实现字体控制
2017/11/27 Javascript
vue-cli3脚手架的配置及使用教程
2018/08/28 Javascript
vue实现简单的星级评分组件源码
2018/11/16 Javascript
vue项目添加多页面配置的步骤详解
2019/05/22 Javascript
Electron + vue 打包桌面操作流程详解
2019/06/24 Javascript
python 字典(dict)遍历的四种方法性能测试报告
2014/06/25 Python
寻找网站后台地址的python脚本
2014/09/01 Python
Java Web开发过程中登陆模块的验证码的实现方式总结
2016/05/25 Python
对python中for、if、while的区别与比较方法
2018/06/25 Python
在windows下使用python进行串口通讯的方法
2019/07/02 Python
numpy数组广播的机制
2019/07/12 Python
解决Python 异常TypeError: cannot concatenate 'str' and 'int' objects
2020/04/08 Python
openCV提取图像中的矩形区域
2020/07/21 Python
Python根据字典的值查询出对应的键的方法
2020/09/30 Python
利用html5 file api读取本地文件示例(如图片、PDF等)
2018/03/07 HTML / CSS
亿企通软件测试面试题
2012/04/10 面试题
文明家庭先进事迹材料
2014/05/14 职场文书
学校端午节活动方案
2014/08/23 职场文书
弄虚作假心得体会
2014/09/10 职场文书
2015自愿离婚协议书范本
2015/01/28 职场文书
信访工作个人总结
2015/03/03 职场文书
老公写给老婆的检讨书
2015/05/06 职场文书
婚前协议书怎么写,才具有法律效力呢 ?
2019/06/28 职场文书
pytorch 实现在测试的时候启用dropout
2021/05/27 Python