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 相关文章推荐
图片自动更新(说明)
Oct 02 Javascript
JavaScript 学习点滴记录
Apr 24 Javascript
利用jQuery操作对象数组的实现代码
Apr 27 Javascript
弹出层之1:JQuery.Boxy (一) 使用介绍
Oct 06 Javascript
Javascript实现滑块滑动改变值的实现代码
Apr 12 Javascript
node.js中格式化数字增加千位符的几种方法
Jul 03 Javascript
Vue.js学习之计算属性
Jan 22 Javascript
ionic环境配置及问题详解
Jun 27 Javascript
JS实现的按钮点击颜色切换功能示例
Oct 19 Javascript
解决低版本的浏览器不支持es6的import问题
Mar 09 Javascript
vue axios数据请求get、post方法及实例详解
Sep 11 Javascript
vue 公共列表选择组件,引用Vant-UI的样式方式
Nov 02 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
日本十大最佳动漫,全都是二次元的神级作品
2019/10/05 日漫
基于MySQL体系结构的分析
2013/05/02 PHP
javascript Object与Function使用
2010/01/11 Javascript
Javascript表达式中连续的 &amp;&amp; 和 || 之赋值区别
2010/10/17 Javascript
学习并汇集javascript匿名函数
2010/11/25 Javascript
用js实现判断当前网址的来路如果不是指定的来路就跳转到指定页面
2011/05/02 Javascript
js的压缩及jquery压缩探讨(提高页面加载性能/保护劳动成果)
2013/01/29 Javascript
js中如何把字符串转化为对象、数组示例代码
2013/07/17 Javascript
javascript中的this详解
2014/12/08 Javascript
node.js中的buffer.fill方法使用说明
2014/12/14 Javascript
Javascript核心读书有感之类型、值和变量
2015/02/11 Javascript
js实现touch移动触屏滑动事件
2015/04/17 Javascript
Angular.js如何从PHP读取后台数据
2016/03/24 Javascript
JS未跨域操作iframe里的DOM
2016/06/01 Javascript
JS实现获取剪贴板内容的方法
2016/06/21 Javascript
JavaScript正则表达式exec/g实现多次循环用法示例
2017/01/17 Javascript
react-router实现跳转传值的方法示例
2017/05/27 Javascript
微信小程序picker组件下拉框选择input输入框的实例
2017/09/20 Javascript
解决vuex数据异步造成初始化的时候没值报错问题
2019/11/13 Javascript
微信小程序反编译的实现
2020/12/10 Javascript
如何在vue 中使用柱状图 并自修改配置
2021/01/21 Vue.js
python实现将pvr格式转换成pvr.ccz的方法
2015/04/28 Python
Django实现图片文字同时提交的方法
2015/05/26 Python
Python编程中time模块的一些关键用法解析
2016/01/19 Python
基于Python的PIL库学习详解
2019/05/10 Python
如何在windows下安装Pycham2020软件(方法步骤详解)
2020/05/03 Python
阿迪达斯德国官方网站:adidas德国
2017/07/12 全球购物
信息管理专业推荐信
2013/10/29 职场文书
高中数学教师求职信
2013/10/30 职场文书
工商管理专业应届生求职信
2013/11/04 职场文书
化学专业大学生职业生涯规划范文
2014/09/13 职场文书
如何签定毕业生就业协议书
2014/09/28 职场文书
2015暑假假期总结
2015/07/13 职场文书
给校长的建议书作文500字
2015/09/14 职场文书
曾国藩励志经典名言37句,蕴含哲理
2019/10/14 职场文书
Nginx解决403 forbidden的完整步骤
2021/04/01 Servers