第六题小demo-Tab选项卡案例

小黑子的Tab选项卡案例

需求:

1.选项卡由英雄联盟、DOTA、 风暴英雄、300英雄四块组成;
2.未选择时,默认选中第一个标签页;
3.选择某一选项后,下方跳出对应游戏的相关介绍内容。

实现原理:

  1. 对于我的Tab选项卡其实就是ul li结构用弹性盒子布局实现横向排列,需要注意的是要在头部部分设置flex: 1 作用于将头部展开铺满 ,这样就可以快速实现选项卡四块组成
  2. 默认选择时,开始给每个li加display:none,再第一个加active——block可以实现默认选中第一个标签页效果,切换再用js的for循环实现
  3. js的for循环中,给每个头部li设置自定义属性加索引,在点击时获取属性给外部函数执行,对每一个li的active先移除一遍,在点击时加active,这样就可以实现点击切换下方跳出对应游戏的相关介绍内容的效果

html部分

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
    <link rel="stylesheet" href="./Tab选项关卡css.css">
    <script src="./Tab选项关卡js.js"></script>
</head>
<body>
    <ul class="header">
        <li class="active">英雄联盟</li>
        <li>DOTA</li>
        <li>风暴英雄</li>
        <li>300英雄</li>
      </ul>
      <ul class="box">
        <li class="active">
            《英雄联盟》(League of Legends,简称LOL)是由美国拳头游戏(Riot Games)开发、中国内地由腾讯游戏代理运营的英雄对战MOBA竞技网游。游戏里拥有数百个个性英雄,并拥有排位系统、符文系统等特色系统。
        </li>

        <li>
            《DotA》(Defense of the Ancients),可以译作守护古树、守护遗迹、远古遗迹守卫, 是由暴雪公司出品即时战略游戏《魔兽争霸3》的一款多人即时对战、自定义地图,可支持10个人同时连线游戏,是暴雪公司官方认可的魔兽争霸的RPG地图。
        </li>

        <li>
            《风暴英雄》 是由暴雪娱乐公司开发的一款运行在Windows和Mac OS上的在线多人竞技PC游戏。
            游戏中的英雄角色主要来自于暴雪四大经典游戏系列:《魔兽世界》、《暗黑破坏神》、《星际争霸》和《守望先锋》。它是一款道具收费的游戏,与《星际争霸Ⅱ》基于同一引擎开发。
        </li>

        <li>
            《300英雄》是由上海跳跃网络科技有限公司自主研发,深圳中青宝互动网络股份有限公司运营的一款类DOTA网游。游戏以7v7组队对抗玩法为主,提供永恒战场和永恒竞技场两种经典模式任由玩家选择,并创新性地加入勇者斗恶龙、克隆战争等多种休闲娱乐玩法。
        </li>
      </ul>
</body>
</html>

css部分:

* {
    margin: 0;
    padding: 0;
  }

  ul {
    list-style: none;
  }

  .header {
    display: flex;
    width: 1000px;
    margin: 0 auto;
  }

  .header li {
    flex: 1;/* 作用于将弹性盒子展开铺满 */
    height: 60px;
    line-height: 60px;
    text-align: center;
    border-bottom: 2px solid red;
  }

  .box {
    width: 1000px;
    position: relative;
    margin: 0 auto;
  }

  .box li{
    position: absolute;
    left: 0;
    top: 0;
    height: 500px;
    display: none;
    padding-top: 100px;
    text-align: center;
    color: aliceblue;
  }

  .box li:nth-of-type(1){
    background-image: url(./英雄联盟.jpg);
    background-size: cover;
  }
  .box li:nth-of-type(2){
    background-image: url(./DOTA.jpg);
    background-size: cover;
  }
  .box li:nth-of-type(3){
    background-image: url(./风暴英雄.jpg);
    background-size: cover;
  }
  .box li:nth-of-type(4){
    background-image: url(./300英雄.jpg);
    background-size: cover;
  }

  .header .active {
    background-color: yellowgreen;
  }

  .box .active {
    display: block;
    /* 与li的display: none呼应,实现点击切换的效果 */
  }

js部分:

window.onload = function(){
    var oheader = document.querySelectorAll(".header li");
    var obox = document.querySelectorAll(".box li");
    for (var i = 0; i < oheader.length; i++)
     {
      //在for循环中,给每个头部li设置自定义属性加索引,在点击时获取属性给外部函数执行
      oheader[i].dataset.index = i;
      //为了防止没点之前就执行完,将点击执行在外部
      oheader[i].onclick = handler;
    }
    //在外部定义
    function handler() 
    {
      var index = this.dataset.index; //this实现点击返回的是当前这一项,再利用dataset.index就可以知道点击时,是第几个
      for (var j = 0; j < oheader.length; j++) //对每一个的active先移除一遍,在点击时加active
      {
        oheader[j].classList.remove("active");
        obox[j].classList.remove("active");
      }

      oheader[index].classList.add("active");
      obox[index].classList.add("active");
    }
}

样式:
在这里插入图片描述

动态效果:

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值