最新文章专题视频专题问答1问答10问答100问答1000问答2000关键字专题1关键字专题50关键字专题500关键字专题1500TAG最新视频文章推荐1 推荐3 推荐5 推荐7 推荐9 推荐11 推荐13 推荐15 推荐17 推荐19 推荐21 推荐23 推荐25 推荐27 推荐29 推荐31 推荐33 推荐35 推荐37视频文章20视频文章30视频文章40视频文章50视频文章60 视频文章70视频文章80视频文章90视频文章100视频文章120视频文章140 视频2关键字专题关键字专题tag2tag3文章专题文章专题2文章索引1文章索引2文章索引3文章索引4文章索引5123456789101112131415文章专题3
当前位置: 首页 - 科技 - 知识百科 - 正文

跨浏览器通用、可重用的选项卡tab切换js代码_javascript技巧

来源:动视网 责编:小采 时间:2020-11-27 21:00:42
文档

跨浏览器通用、可重用的选项卡tab切换js代码_javascript技巧

跨浏览器通用、可重用的选项卡tab切换js代码_javascript技巧:由于近来学了点js,于是我装逼道。不太难吧。就切一下display属性?同学无视我。说要搞个通用的。什么还要跟ajax交互。我愣是没有听懂。到底要搞什么。权当作练手,我自己胡弄了一个。 需求:同学口中的通用我不知道神马意思
推荐度:
导读跨浏览器通用、可重用的选项卡tab切换js代码_javascript技巧:由于近来学了点js,于是我装逼道。不太难吧。就切一下display属性?同学无视我。说要搞个通用的。什么还要跟ajax交互。我愣是没有听懂。到底要搞什么。权当作练手,我自己胡弄了一个。 需求:同学口中的通用我不知道神马意思


由于近来学了点js,于是我装逼道。。不太难吧。。就切一下display属性?同学无视我。说要搞个通用的。。什么还要跟ajax交互。???我愣是没有听懂。。到底要搞什么。。权当作练手,我自己胡弄了一个。
  需求:同学口中的通用我不知道神马意思。。那我就按自己的理解吧。
    ①跨浏览器,IE6+,FF,Chrome,Safari,Opera
    ②同一个页面可以用同一个js设置不同的选项卡。
  说太多没啥米用,来看代码吧。
一、html部分(其实这还没啥好看的,设置了三个,前两个是一样的,通过click事件触发,最后一个通过鼠标移动触发)
代码如下:


  • 项目一

  • 项目二

  • 项目三



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

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

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





  • 项目一

  • 项目二

  • 项目三



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

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

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





  • 项目一

  • 项目二

  • 项目三



  • 类为"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代码
    代码如下:
    /**
    * 事件处理通用函数
    */
    var EventUtil = {
    //跨浏览器取事件对象event
    getEvent : function(event){
    return event ? event : window.event;
    },
    //款浏览器取事件对象的目标DOM节点
    getTarget : function(event){
    return event.target||event.srcElement;
    },
    //跨浏览器对节点进行事件绑定
    addHandler : function(element,type,handler){
    if(element.addEventListener){
    element.addEventListener(type,handler,false);
    }else if(element.attachEvent){
    element.attachEvent("on"+type,handler);
    }else{
    element["on"+type] = handler;
    }
    }
    };
    //设置选项卡切换方式
    tabSwitch("tab1","click");
    tabSwitch("tab2","mouseover");
    /**
    * 选项卡通用函数
    */
    // 传入参数inClassName设定为绑定的选项卡类名,参数triggerType设定为触发切换的类型
    function tabSwitch(inClassName,triggerType){
    //取得全部选项卡区域
    if(document.querySelectorAll){
    var tabs = document.querySelectorAll("."+inClassName);
    }else{
    var divs = document.getElementsByTagName("div");
    var tabs = new Array();
    for(var k=0,lenDiv=divs.length; kif(divs[k].className.indexOf(inClassName) > -1){
    tabs.push(divs[k]);
    }
    }
    }
    //为每个选项卡建立切换功能
    for(var j=0,len=tabs.length; j//获取标题和内容列表
    var tab = tabs[j];
    //使用私有作用域为每个选项卡建立切换
    (function(){
    var nameUl = tab.getElementsByTagName("ul")[0];
    var content = tab.getElementsByTagName("ul")[1];
    //初始化选项卡
    nameUl.getElementsByTagName("li")[0].className = "selected";
    content.getElementsByTagName("li")[0].style.display = "block";
    //添加事件委托
    EventUtil.addHandler(nameUl,triggerType,function(event){
    //获取事件对象
    event = EventUtil.getEvent(event);
    var target = EventUtil.getTarget(event);
    //选项卡切换
    if(target.nodeName.toLowerCase() == "li"){
    //分别取得标题列表项和内容列表项
    var nameList = nameUl.getElementsByTagName("li");
    var contentList = content.getElementsByTagName("li");
    //标题添加selected类,并显示内容
    for(var i=0,len=nameList.length; inameList[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神)。例如,涉及类添加时,类名的字符串并接保证原有类名不覆盖。例如,可以应对一下结构变换的适应能力。例如(好多问题啊)。。
      至于还有什么毛病,请各位大侠指导了(这人脸皮厚,尽管喷)。
      按道理要上传demo的?点此实例下载

    文档

    跨浏览器通用、可重用的选项卡tab切换js代码_javascript技巧

    跨浏览器通用、可重用的选项卡tab切换js代码_javascript技巧:由于近来学了点js,于是我装逼道。不太难吧。就切一下display属性?同学无视我。说要搞个通用的。什么还要跟ajax交互。我愣是没有听懂。到底要搞什么。权当作练手,我自己胡弄了一个。 需求:同学口中的通用我不知道神马意思
    推荐度:
    标签: 技巧 js javascript
    • 热门焦点

    最新推荐

    猜你喜欢

    热门推荐

    专题
    Top