zoukankan      html  css  js  c++  java
  • jQuery tab 切换函数

    今天接到的页面里面 有很多的切换 以前都是遇到切换临时用选择器写一个 
    比如这样:

     

    HTML:

    <ul id="tab">
    <li>项目一</li>
    <li>项目二</li>
    <li>项目三</li>
    </ul>
    <div id="tab_con">
    <div>内容一内容一内容一内容一</div>
    <div>内容二内容二内容二内容二</div>
    <div>内容三内容三内容三内容三</div>
    </div>

    脚本:

    $("#tab").find("li").each(function(i){
         //标记当前状态
         $("#tab").find("li").eq(i).addClass("cur").siblings().removeClass("cur");
        //相应容器里面的容器显示或者控制
         $("#tab_con").find("div").eq(i).show().siblings().hide();
    }) 
    //(函数1)

    现在麻烦来了 有很多很多的切换 不得不去写N段同样的代码。。这就效率低下了
    还有 如果 你的 #tab_con 里面 不止有 div 还有几个ul该怎么办呢? 如果你不想点击切换
    而是想划过切换怎么办呢?如果你想多个地方都用切换效果怎么办呢?
    所以得把它们统统给整成参数

    现在我们整理一下需要参数化的东西
    首先是 控制切换的容器 以及 这个容器底下来触发切换的标签
    我们给它们命名为 id_tab tag_tab 
    然后是 内容切换的容器 以及 这个容器底下来做相应切换的标签
    我们给它们命名为 id_con tag_con
    当然还得有 触发的方式 (这里稍后将会给我们带来麻烦~~)
    有标记当前的样式 .cur

    那么 我们现在先标记一下当前状态吧 这个函数很简单

    function cur(ele){ 
    $(ele).addClass("cur").siblings().removeClass("cur");
    }

    这个函数的意思是 该元素增加class cur 其兄弟元素取消 class cur

    用法是 cur(this); 就足够了 这个函数我们备用 一会我们会在 tab 函数中调用它

    现在我们来写 tab 函数

    function tab(id_tab,tag_tab,id_con,tag_con){
    $(id_tab).find(tag_tab).each(function(i){
    $(id_tab).find(tag_tab).eq(i).click(
       function(){
        cur(this);
        $(id_con).find(tag_con).eq(i).show().siblings(tag_con).hide();
        }
       )           
    }) 
    }

    是不是很简单呢?只是把 函数1 里面的可以变化的东西都提取了出来

    $(id_con).find(tag_con).eq(i).show().siblings(tag_con).hide(); 这一句 内容切换的主要函数 而且它避免了 

    切换容器中其他容器被误选择 只对一种标签做切换

    但是我们没有把触发方式给提取出来 而是在函数里固定了 click
    下面我们就对这个进行改装
    很自然的 我们得到了:

    function tab(id_tab,tag_tab,id_con,tag_con,act){
    $(id_tab).find(tag_tab).each(function(i){
    $(id_tab).find(tag_tab).eq(i).act(
       function(){
        cur(this);
        $(id_con).find(tag_con).eq(i).show().siblings(tag_con).hide();
        }
       )           
    }) 
    }

    是不是这样 我们就可以 给 act 赋值为 click mouseover 就可以了呢?
    答案是 NO way 在FF 下虽然不报错 但是不运行 IE则报错 不知道其他高人有什么方法解决滴?

    那只有写的复杂点 写成这样:
    如果 act缺省 那就是 点击切换了 如果被赋值为 mouseover 则是 划过切换了

    function tab(id_tab,tag_tab,id_con,tag_con,act){
    if(!act){ act="click"};
    if(act=="click"){
       $(id_tab).find(tag_tab).each(function(i){
       $(id_tab).find(tag_tab).eq(i).click(
       function(){
        cur(this);
        $(id_con).find(tag_con).eq(i).show().siblings(tag_con).hide();
        })           
       })  
       }
    if(act=="mouseover"){
       $(id_tab).find(tag_tab).each(function(i){
       $(id_tab).find(tag_tab).eq(i).mouseover(
       function(){
        cur(this);
        $(id_con).find(tag_con).eq(i).show().siblings(tag_con).hide();
        })           
       })  
       } 
      
    }

    使用方法:

    tab("#tri","li","#game_con","div","mouseover");

    html:

    <div class="ngame">
              <ul id="tri">
                <li class="cur">射手榜</li>
                <li>助攻榜</li>
                <li>红黄榜</li>
              </ul>
              <div id="game_con">
                <div>
                  内容11111111
                  
                </div>
                <div>
                  内容222222
                </div>
                <div>
                  内容333333
    
                </div>
              </div>
            </div>

    tab(".tab_con","li",".tab_con","table");
    用类作为选择符虽然效率低点 但是 可以多次重用 这个性质不错

    tab("#tzxu","li","#tzxn","div");
    不过最好还是用ID来做选择符 那效率高点

    tab("#vtag","li","#vtagn","ul");
    这些都是缺省的 点击切换

    最后 别忘了一定要链上jQuery 的库文件啊 一定要在页面加载其他JS之前写啊 否则你会遇到莫名其妙的麻烦和错误 呵呵

     

  • 相关阅读:
    HTML 块标签的学习(样式/节)
    HTML 链接标签的学习
    HTML 列表标签的学习
    (译)快速指南:用UIViewPropertyAnimator做动画
    RunLoop 总结:RunLoop的应用场景(二)
    RunLoop 总结:RunLoop的应用场景(一)
    Android Studio精彩案例(二)《仿微信动态点击底部tab切换Fragment》
    Android Studio精彩案例(一)《ActionBar和 ViewPager版仿网易新闻客户端》
    Android简易实战教程--第四十五话《几种对话框》
    Android中Sqlite数据库进行增删改查
  • 原文地址:https://www.cnblogs.com/huanlei/p/2612763.html
Copyright © 2011-2022 走看看