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

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

1、

<!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>

2、

<!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>

3、总结封装(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>
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
在前面的笔记中,我们已经实现选项卡的基本功能,可以切换不同的选项卡内容。但是,为了让选项卡更加美观和实用,我们需要进一步完善选项卡的功能。 ## 1. 添加图标 我们可以为每个选项卡添加一个图标,这样可以更加直观地表示每个选项卡的功能。实现方法如下: 首先,我们需要准备好图标。这里我们以三个选项卡为例,分别对应“文件”,“编辑”和“视图”功能。我们可以在 Unity 的 Assets 窗口中创建一个文件夹,然后将三个图标拖拽到该文件夹中。 接下来,在 OnGUI() 函数中,为每个选项卡添加一个图标。具体实现代码如下: ```csharp // 定义三个纹理变量 private Texture2D fileTexture; private Texture2D editTexture; private Texture2D viewTexture; // 在 Start() 函数中加载纹理 void Start() { fileTexture = Resources.Load<Texture2D>("fileIcon"); editTexture = Resources.Load<Texture2D>("editIcon"); viewTexture = Resources.Load<Texture2D>("viewIcon"); } // 在 OnGUI() 函数中为每个选项卡添加图标 void OnGUI() { GUI.skin = skin; // 绘制选项卡标签栏 GUILayout.BeginHorizontal(); if (GUILayout.Toggle(selectedTab == 0, new GUIContent(fileTexture, "文件"), "tabLeft")) selectedTab = 0; if (GUILayout.Toggle(selectedTab == 1, new GUIContent(editTexture, "编辑"), "tabMid")) selectedTab = 1; if (GUILayout.Toggle(selectedTab == 2, new GUIContent(viewTexture, "视图"), "tabRight")) selectedTab = 2; GUILayout.EndHorizontal(); // 绘制选项卡内容 switch (selectedTab) { case 0: DrawFileTab(); break; case 1: DrawEditTab(); break; case 2: DrawViewTab(); break; } } ``` 在上面的代码中,我们首先定义了三个纹理变量,然后在 Start() 函数中加载了这三个纹理。在 OnGUI() 函数中,我们为每个选项卡添加了一个图标,并使用 GUIContent 类型的参数来设置图标和鼠标悬停时显示的文本。 运行程序,我们可以看到每个选项卡都有了自己的图标。 ## 2. 设置选项卡大小 默认情况下,选项卡的大小是根据标签文本的长度来自动调整的。但是,有时候我们希望选项卡的大小是固定的,这样可以使选项卡更加美观。实现方法如下: 首先,我们需要定义一个变量来保存选项卡的宽度。例如,我们希望每个选项卡的宽度都是 100 像素,那么可以定义一个变量如下: ```csharp private int tabWidth = 100; ``` 然后,在 OnGUI() 函数中为每个选项卡设置宽度。具体实现代码如下: ```csharp // 在 OnGUI() 函数中为每个选项卡设置宽度 void OnGUI() { GUI.skin = skin; // 计算选项卡的总宽度 int totalWidth = tabWidth * 3 + 6; // 绘制选项卡标签栏 GUILayout.BeginHorizontal(GUILayout.Width(totalWidth)); if (GUILayout.Toggle(selectedTab == 0, new GUIContent(fileTexture, "文件"), "tabLeft", GUILayout.Width(tabWidth))) selectedTab = 0; if (GUILayout.Toggle(selectedTab == 1, new GUIContent(editTexture, "编辑"), "tabMid", GUILayout.Width(tabWidth))) selectedTab = 1; if (GUILayout.Toggle(selectedTab == 2, new GUIContent(viewTexture, "视图"), "tabRight", GUILayout.Width(tabWidth))) selectedTab = 2; GUILayout.EndHorizontal(); // 绘制选项卡内容 switch (selectedTab) { case 0: DrawFileTab(); break; case 1: DrawEditTab(); break; case 2: DrawViewTab(); break; } } ``` 在上面的代码中,我们首先计算了选项卡标签栏的总宽度,然后使用 GUILayout.BeginHorizontal() 函数设置了标签栏的宽度。接下来,我们使用 GUILayout.Width() 函数为每个选项卡设置宽度。 运行程序,我们可以看到每个选项卡的宽度都是固定的。 ## 3. 支持拖拽 有时候,我们希望能够通过拖拽的方式切换选项卡,这样可以使用户体验更加流畅。实现方法如下: 首先,我们需要定义一个变量来保存当前鼠标是否按下。例如,我们可以定义一个布尔型变量如下: ```csharp private bool isMouseDown; ``` 然后,在 OnGUI() 函数中检测鼠标是否按下,并根据鼠标位置计算选项卡索引。具体实现代码如下: ```csharp // 在 OnGUI() 函数中检测鼠标是否按下,并根据鼠标位置计算选项卡索引 void OnGUI() { GUI.skin = skin; // 计算选项卡的总宽度 int totalWidth = tabWidth * 3 + 6; // 绘制选项卡标签栏 GUILayout.BeginHorizontal(GUILayout.Width(totalWidth)); if (Event.current.type == EventType.MouseDown && Event.current.button == 0) { isMouseDown = true; } if (Event.current.type == EventType.MouseUp && Event.current.button == 0) { isMouseDown = false; int index = (int)(Event.current.mousePosition.x / tabWidth); if (index != selectedTab) { selectedTab = index; } } if (GUILayout.Toggle(selectedTab == 0, new GUIContent(fileTexture, "文件"), "tabLeft", GUILayout.Width(tabWidth))) selectedTab = 0; if (GUILayout.Toggle(selectedTab == 1, new GUIContent(editTexture, "编辑"), "tabMid", GUILayout.Width(tabWidth))) selectedTab = 1; if (GUILayout.Toggle(selectedTab == 2, new GUIContent(viewTexture, "视图"), "tabRight", GUILayout.Width(tabWidth))) selectedTab = 2; GUILayout.EndHorizontal(); // 绘制选项卡内容 switch (selectedTab) { case 0: DrawFileTab(); break; case 1: DrawEditTab(); break; case 2: DrawViewTab(); break; } } ``` 在上面的代码中,我们首先检测鼠标是否按下。如果鼠标左键按下,我们将 isMouseDown 变量设置为 true。接下来,我们检测鼠标左键是否释放。如果是,我们将 isMouseDown 变量设置为 false,并根据鼠标位置计算选项卡索引。如果选项卡索引不等于当前选项卡索引,则切换选项卡。 运行程序,我们可以使用鼠标拖拽的方式切换选项卡

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值