实现选项卡切换的三种方式

首先我用Jquery库实现了一个简单的效果,

只需要点击上面的导航标签即可切换下方内容,Html代码如下

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="utf-8">
    <title>tab切换</title>
    <style type="text/css">
        *{padding:0;margin:0;font:normal 15px "微软雅黑";color:#000;}
        ul{list-style-type: none;padding-left: 5px;margin-bottom: -2px}
        .tab{width:500px;margin: 10px auto}
        a{text-decoration: none;}
        .title li{display: inline-block;border: 1px solid #999;border-bottom: 2px solid #a00;background: #fff;text-align: center;width: 60px;height: 30px;margin: 0 1px;line-height: 30px}
        .title .active{border-top:2px solid #a00;border-bottom: 2px solid #fff; }
        #content{margin: 0;border: 1px solid #ccc;border-top: 2px solid #a00;width: 300px}
        #content div{display: none;padding: 10px 0}
        #content .mod{display: block;}
    </style>
</head>
<body>
<div class="tab">
    <ul class="title">
        <li class="active"><a href="#">房产</a></li>
        <li><a href="#">家居</a></li>
        <li><a href="#">二手房</a></li>
        <!--<li><a href="#">家居</a></li>-->
    </ul>
    <div id="content">
        <div class="mod">
            <ul>
                <li><a href="#">房产内容1</a> </li>
                <li><a href="#">房产内容2</a> </li>
                <li><a href="#">房产内容3</a> </li>
            </ul>
        </div>
        <div class="mod" style="display: none">
            <ul>
                <li><a href="#">家居内容1</a> </li>
                <li><a href="#">家居内容2</a> </li>
                <li><a href="#">家居内容3</a> </li>
            </ul>
        </div>
        <div class="mod" style="display: none">
            <ul>
                <li><a href="#">二手房内容1</a> </li>
                <li><a href="#">二手房内容2</a> </li>
                <li><a href="#">二手房内容3</a> </li>
            </ul>
        </div>
    </div>
</div>
</body>
</html>

Jquery代码如下:

<script type="text/javascript" src="jquery-3.0.0.min.js"></script>
<script type="text/javascript">
    $(function(){
        $(".title li").click(function(){
//            var $this=$(this);
//            alert($this.index());
            $(this).addClass("active").siblings().removeClass("active");
            $("#content .mod").eq($(".title li").index(this)).show().siblings("#content .mod").hide();
        });
    });
</script>

相信大家用Jquery都是比较轻松,紧接着我又尝试了用源生的js代码来实现这种效果,效果图如下:

实现所需的html代码:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
    <style type="text/css">
        *{padding: 0;margin: 0;box-sizing: border-box}
        div{width: 70%;margin: 20px auto;}
        ul{
            list-style: none;overflow: hidden;
        }
        #nav{
            width: 400px;height: 40px;text-align: center;line-height: 40px;
            background: #c5c5c5;
        }
        #nav li{
            width: 25%;height: 40px;float: left;border: 1px solid #c5c5c5;
            border-bottom: none;
        }
        #nav li.active{
            background: #fff;
        }
        #content{
            width: 400px;height: 300px;position: relative;border: 1px solid #c5c5c5;border-top: none;
        }
        #content li{width: 100%;height: 100%;position: absolute;padding: 10px;display: none}
    </style>
</head>
<body>
<div>
    <ul id="nav">
    <li class="active">选项一</li>
    <li>选项二</li>
    <li>选项三</li>
    <li>选项四</li>
</ul>
<ul id="content">
    <li style="display: block">内容一</li>
    <li>内容二</li>
    <li>内容三</li>
    <li>内容四</li>
</ul>
</div>
</body>
</html>

js代码如下:

<script type="text/javascript">
  var nav =document.getElementById("nav");
  var navlist = nav.children;
  var con = document.getElementById("content");
  var conlist = con.children;
  for (var i= 0;i<navlist.length;i++){
      navlist[i].index = i;
      navlist[i].onclick = function (){
          for (var m = 0;m< conlist.length;m++){
              navlist[m].className = "";
              conlist[m].style.display ="none";
          }
          this.className = "active";
          conlist[this.index].style.display = "block";
      }
  }
</script>

如果说大家在写页面的时候需要多次实现选项卡效果,但是又不想造成代码重复该怎么办呢?我们这时候可以使用函数封装概念来封装一个函数方法来实现多次调用。

html代码同上,js封装方法代码如下:

<script type="text/javascript">
    function change(navid,conid){
        var nav = document.getElementById(navid);
        var navlist = nav.getElementsByTagName("li");
        var con = document.getElementById(conid);
        var conlist = con.getElementsByTagName("li");
        for (i=0;i<navlist.length;i++){
            navlist[i].onclick = function (i){
                return function (){
                    for (m = 0;m<conlist.length;m++){
                        navlist[m].className ="";
                        conlist[m].style.display = "none";
                    }
                    this.className = "active";
                    conlist[i].style.display = "block";
                }
            }(i);
        }
    };
    change("nav","content");       //调用函数方法
</script>

好了,以上就是实现选项卡切换的三种方法,感谢。

时间: 2024-10-09 05:36:29

实现选项卡切换的三种方式的相关文章

js实现选项卡切换的三种方式

前两种主要实现一个选项卡的切换,第三种使用闭包看书,构造函数实现多个选项卡的切换: 1.第一种实现实现效果为: 实现代码为: <!doctype html> <!DOCTYPE html> <html lang="en"> <head> <meta charset="utf-8"/> <title>tab切换</title> <style type="text/css

【百度地图API】关于如何进行城市切换的三种方式

原文:[百度地图API]关于如何进行城市切换的三种方式 摘要:本文介绍了三种切换城市的方式:查询城市.城市列表和显示城市轮廓. --------------------------------------------------------------------- 很多API爱好者问到我,如何像百度地图那样,实现各个城市之间的切换呢? 在这里,公布以下三种方式. 第一种,是查询城市的方法.使用API接口的LocalSearch方法.我之前写过完整的文章,请查看: http://www.cnbl

iOS开发 跳转场景的三种方式

假设A跳转到B,三种方法: 1.按住ctrl键,拖动A上的控件(比如说UIButton)到B上,弹出菜单,选择Modal.不需要写任何代码,在A上点击Button就会跳转到B 2. 按住ctrl键,拖动A上的View Controller到B上,弹出菜单,选择Modal,两个场景间自动添加连接线和图标,选中该图标,打开Storyboard Segue,identifier输入一个标识符,这里以”aaaa”为例.A里需要跳转时,执行下面的代码: 1 [self performSegueWithId

JavaScript--------------------jQuery中.bind() .live() .delegate() .on()的区别 和 三种方式写光棒事件 动画

bind(type,[data],fn) 为每个匹配元素的特定事件绑定事件处理函数. $("a").bind("click",function(){alert("ok");}); live(type,[data],fn) 给所有匹配的元素附加一个事件处理函数,即使这个元素是以后再添加进来的 $("a").live("click",function(){alert("ok");}); de

react做tab切换的几种方式

最近搞一个pc端的活动,搞了一个多月,甚烦,因为相比于pc端,更喜欢移动端多一点.因为移动端又能搞我的react了. 今天主要总结一下react当中tab切换的几种方式,因为tab切换基本上都会用到.当然,你也可以在react当中用jquery或者zepto来实现,不过既然都用react了,能不能用jq,就尽量不用jq.不过不得不吐槽一下,在jquery很简单的东西,在react中稍微复杂化了一点. 目前我用到的tab切换只有两种方式,所以暂时总结这两种,以后有遇到其他的再总结. 第一种.只是子

Scala学习2 ———— 三种方式完成HelloWorld程序

三种方式完成HelloWorld程序 分别采用在REPL,命令行(scala脚本)和Eclipse下运行hello world. 一.Scala REPL. 按照第一篇在windows下安装好scala后,直接Ctrl+R,然后在运行命令窗里输入scala,或者输入cmd后,进入命令行在输入scala. 然后我们输入 print("Hello World!") 看下结果: 第一种方式运行完毕. 注意:前两行命令使用了Tab键,可以像bash一样有补全的功能哦! 二.Scala脚本完成H

关于tomcat部署应用的三种方式

关于tomcat部署应用虽然不是一个经常的操作,因为一旦选择了一种部署方式,我们其他的应用就会不经大脑的使用这种既定模式, 如果不使用这种部署方式,但是对于其他的部署方式不是很清楚的话,很容易抓瞎,所以写这篇文章记录. 第一种  : 直接将web应用丢在tomcat的webapp目录中 第二种  : 通过修改tomcat的server.xml文件,添加配置片段来配置项目 第三种  : 通过添加自定义的项目配置文件(xxxx.xml) 第一种 : 直接将web应用丢在tomcat的webapp目录

Latex中文utf-8编码的三种方式

我们知道Latex一般用CJK和CTEX宏包支持中文编辑,CJK和CTEX的默认编码是GBK,而windows下的默然编码就是GBK,因此CJK和CTEX不需要特殊配置就可以直接支持中文Latex编译,只需要用GBK编码保存文件即可.但是如果把文件的字符编码换成现在更加普遍的utf-8的话,应该怎么操作呢?在这里有3种方式可以使用. 1.CJKutf8 CJK有两个基本宏包:CJK和CJKutf8,其中后者面向utf-8编码,其一般使用方法如下: \usepackage{CJKutf8} \be

注册JDBC的三种方式

1. Class.forName("com.mysql.jdbc.Driver");//加载数据库驱动 Java代码   Class.forName("com.mysql.jdbc.Driver");//加载数据库驱动 String url="jdbc:mysql://localhost:3306/databasename";//数据库连接子协议 Connection conn=DriverManager.getConnection(url,&q