html5打开浏览器选项卡,选项卡跨浏览器切换 JS

环境: ①跨浏览器,IE6+,FF,Chrome,Safari,Opera

②同一个页面可以用同一个js设置不同的选项卡。

一、html部分(其实这还没啥好看的,设置了三个,前两个是一样的,通过click事件触发,最后一个通过鼠标移动触发)

class="name">

项目一项目二项目三

class="content">

类为 "tab1"项目一内容,通过 "click"触发类为 "tab1"项目二内容,通过 "click"触发类为 "tab1"项目三内容,通过 "click"触发

class="name">

项目一项目二项目三

class="content">

类为 "tab1"项目一内容,通过 "click"触发类为 "tab1"项目二内容,通过 "click"触发类为 "tab1"项目三内容,通过 "click"触发

class="name">

项目一项目二项目三

class="content">

类为 "tab2"项目一内容,通过 "mouseover"触发类为 "tab2"项目二内容,通过 "mouseover"触发类为 "tab2""项目三内容,通过 "mouseover"触发

特别声明,由于我是菜鸟,所以,我写的js只能在某种特定的结构下运作(真菜!),没有想到怎么搞个极致的通用机制。这个js需要怎样的结构?那就是最外层一个div容器,标题由一个ul列表表示,内容也是一个ul列表。如果不是这种格式,我写的菜鸟代码是无法运行的(菜啊。。。),要运行,就要改改其中的几行js啦。。。

二、样式CSS

body{text-align:center;}.tab1, .tab2{width:350px;margin:0 5px;background:#CC9933;opacity:0.5;border-radius:5px 5px 5px 5px;box-shadow:#CCC 4px 4px 4px;text-align:left;float:left;display:inline;}.name{list-style:none;overflow:hidden;}.name li{width:90px;font:bold 16px/30px Verdana, Geneva, sans-serif;background:#669900;text-align:center;border-radius:5px 5px 5px;margin-right:5px;float:left;display:inline;cursor:pointer;}li.selected{background:#FF9900;}.content li{height:500px;display:none;}

这貌似没什么好说的,加了些最简单的css3,凑合着(这美工好烂啊)。

三、js代码

varEventUtil={//跨浏览器取事件对象eventgetEvent :function(event){returnevent?event : window.event;

},//款浏览器取事件对象的目标DOM节点getTarget :function(event){returnevent.target||event.srcElement;

},//跨浏览器对节点进行事件绑定addHandler :function(element,type,handler){if(element.addEventListener){

element.addEventListener(type,handler,false);

}elseif(element.attachEvent){

element.attachEvent("on"+type,handler);

}else{

element["on"+type]=handler;

}

}

};//设置选项卡切换方式tabSwitch("tab1","click");

tabSwitch("tab2","mouseover");//传入参数inClassName设定为绑定的选项卡类名,参数triggerType设定为触发切换的类型functiontabSwitch(inClassName,triggerType){//取得全部选项卡区域if(document.querySelectorAll){vartabs=document.querySelectorAll("."+inClassName);

}else{vardivs=document.getElementsByTagName_r("div");vartabs=newArray();for(vark=0,lenDiv=divs.length; k-1){

tabs.push(divs[k]);

}

}

}//为每个选项卡建立切换功能for(varj=0,len=tabs.length; j

content.getElementsByTagName_r("li")[0].style.display="block";//添加事件委托EventUtil.addHandler(nameUl,triggerType,function(event){//获取事件对象event=EventUtil.getEvent(event);vartarget=EventUtil.getTarget(event);//选项卡切换if(target.nodeName.toLowerCase()=="li"){//分别取得标题列表项和内容列表项varnameList=nameUl.getElementsByTagName_r("li");varcontentList=content.getElementsByTagName_r("li");//标题添加selected类,并显示内容for(vari=0,len=nameList.length; i

nameList[i].className="";

contentList[i].style.display="none";if(nameList[i]==target){

nameList[i].className="selected";

contentList[i].style.display="block";

}

}

}

});

})();

}

}

就这js函数,我们展开一下吧(很不害羞啊)。。。首先定义了一些事件对象的通用函数,以应对跨浏览器时的使用。接着两行是选项卡切换的函数。一个参数是要定义为选项卡的容器的类,一个是触发切换的类型。

完了就是真正的js,思路是:定义为某个类的容器将会绑定成一个选项卡,切换的方式也可以自定义。tabSwitch("tab1","click");就是所有tab1类都绑定为选项卡,通过click事件切换。

实现切换用到了几个技术,其一,通过类选择器selectqueryAll对同一类型进行选择,为了兼容IE6、7,做了一个备用的遍历版本(非常低效);其二,使用了事件委托,在标题列表ul上绑定了触发事件。

抱怨一下,在取ul的DOM元素时,我用了name作为变量名,结果在chrome和safari绑定不了事件,这里搞了我好久啊!非常郁闷。。。

最后一提的是效果,这个东西有什么效果?就是选项卡切换(废话。。),选中的选项卡标题会添加一个类“selected”,方便设定样式。

最后的最后,我想说,还真有很多要改进的地方(当然的,你又不是pis神)。例如,涉及类添加时,类名的字符串并接保证原有类名不覆盖。例如,可以应对一下结构变换的适应能力。例如(好多问题啊)。。。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
要实现选项卡切换显示对应内容和按钮切换面内容,可以通过以下步骤完成: 1. 创建HTML结构,包括选项卡按钮和对应的内容区域。 ```html <div class="tab"> <button class="tab-btn active" data-tab="tab1">Tab 1</button> <button class="tab-btn" data-tab="tab2">Tab 2</button> <button class="tab-btn" data-tab="tab3">Tab 3</button> <div id="tab1" class="tab-content active">Content of Tab 1</div> <div id="tab2" class="tab-content">Content of Tab 2</div> <div id="tab3" class="tab-content">Content of Tab 3</div> </div> ``` 2. 使用CSS样式设置选项卡和内容区域的样式,包括显示和隐藏。 ```css .tab-btn { background-color: #f1f1f1; border: none; color: #333; display: inline-block; padding: 10px 20px; cursor: pointer; } .tab-btn.active { background-color: #ccc; } .tab-content { display: none; padding: 20px; } .tab-content.active { display: block; } ``` 3. 使用JavaScript为选项卡按钮添加事件监听器,以切换显示对应的内容区域。 ```javascript // 获取选项卡按钮和内容区域 var tabBtns = document.querySelectorAll('.tab-btn'); var tabContents = document.querySelectorAll('.tab-content'); // 为每个选项卡按钮添加事件监听器 tabBtns.forEach(function(btn) { btn.addEventListener('click', function() { // 移除所有按钮的激活状态 tabBtns.forEach(function(btn) { btn.classList.remove('active'); }); // 添加当前按钮的激活状态 btn.classList.add('active'); // 隐藏所有内容区域 tabContents.forEach(function(content) { content.classList.remove('active'); }); // 显示与当前按钮对应的内容区域 var tabId = btn.getAttribute('data-tab'); document.getElementById(tabId).classList.add('active'); }); }); ``` 4. 如果要使用按钮切换面内容,可以使用JavaScript的location对象的replace或assign方法来实现。例如,当用户点击按钮时,你可以使用以下代码将面重定向到目标面: ```javascript var btn = document.getElementById('my-btn'); btn.addEventListener('click', function() { location.replace("http://example.com/next-page"); }); ``` 这将立即将当前面替换为目标面,而不会在浏览器历史记录中留下任何痕迹。如果你想要在用户点击后保留浏览器历史记录,可以使用location对象的assign方法,如下所示: ```javascript var btn = document.getElementById('my-btn'); btn.addEventListener('click', function() { location.assign("http://example.com/next-page"); }); ``` 这将加载目标面并将其添加到浏览器历史记录中,以便用户可以使用浏览器的后退按钮返回到前一个面。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值