• 介绍下京东的(选项卡中的选项卡)是怎么实现的


    我们都谁知道选项卡是通过数组实现的,那么选项卡中的选项卡无非就是一个二维数组。

    道理逻辑很简单,下面是我实现的一个方法:

      1 <!DOCTYPE html>
      2 <html>
      3     <head>
      4         <meta charset="UTF-8">
      5         <title>选项卡嵌套选项卡</title>
      6         <style type="text/css">
      7             *{
      8                 padding: 0;
      9                 margin: 0;
     10                 /*border: 1px solid red;*/
     11             }
     12             li{
     13                 list-style: none;
     14             }
     15             .tab-wrap{
     16                 width: 1004px;
     17                 height: 500px;
     18                 border: none;
     19                 margin: 50px auto;
     20                 overflow: hidden;
     21             }
     22             .tab-title{
     23                 width: 200px;
     24                 height: 100%;
     25                 float: left;
     26             }
     27             .tab-content{
     28                 width: 800px;
     29                 height: 100%;
     30                 float: left;
     31                 position: relative;
     32             }
     33             .tab-title ul{
     34                 width: 100%;
     35                 height: 100%;
     36             }
     37             .tab-title ul li{
     38                 display: block;
     39                 width: 100%;
     40                 /*height: 125px;*/
     41                 font-size: 20px;
     42                 text-align: center;
     43                 cursor: pointer;
     44                 line-height: 125px;
     45                 border-bottom: 1px dashed #909090;
     46             }
     47             .tab-title ul li:last-child{
     48                 border-bottom: none;
     49             }
     50             .tab-title ul .active{
     51                 background: #F55A00;
     52             }
     53             .tab-content-showImage{
     54                 width: 100%;
     55                 height: 100%;                
     56             }
     57             .tab-content-subtitle{
     58                 position: absolute;
     59                 left: 0px;
     60                 bottom: 0px;
     61                 background: white;                
     62                 filter(alpha: 80);
     63                 opacity: 0.8;
     64             }
     65             .tab-content-subtitle li{
     66                 display: inline-block;
     67                 height: 50px;
     68                 border: 1px solid lightblue;
     69                 text-align: center;
     70                 line-height: 50px;
     71                 color: black;
     72                 cursor: pointer;
     73             }
     74             .tab-content-subtitle .active{
     75                 background: red;
     76             }
     77         </style>
     78     </head>
     79     <body>
     80         <!--创建容器-->
     81         <div class="tab-wrap" id="tab">
     82             <div class="tab-title">
     83                 <ul></ul>
     84             </div>
     85             <div class="tab-content">
     86                 <img class="tab-content-showImage" />
     87                 <ul class="tab-content-subtitle"></ul>
     88             </div>
     89         </div>
     90     </body>
     91     <script type="text/javascript">
     92         window.onload = function(){
     93             var tab = document.getElementById('tab');
     94             var tabTitle = document.getElementsByClassName('tab-title')[0];
     95             var tabTitlelist = tabTitle.getElementsByTagName('ul')[0];
     96             var tabContent = document.getElementsByClassName('tab-content')[0];
     97             var showImage = document.getElementsByClassName('tab-content-showImage')[0];
     98             var subtitle = document.getElementsByClassName('tab-content-subtitle')[0];            
     99             var arr = [
    100                 {
    101                     "title":'标题1',
    102                     "subtitle":['小标题1','小标题2','小标题3'],
    103                     "pic":['../img/timg (1).jpg', '../img/timg (2).jpg', '../img/timg (3).jpg']
    104                 },
    105                 {
    106                     "title":'标题2',
    107                     "subtitle":['小标题1','小标题2','小标题3','小标题4'],
    108                     "pic":['../img/timg (4).jpg', '../img/timg (5).jpg', '../img/timg (2).jpg', '../img/timg (1).jpg']
    109                 },
    110                 {
    111                     "title":'标题3',
    112                     "subtitle":['小标题1','小标题2','小标题3','小标题4','小标题5'],
    113                     "pic":['../img/timg (2).jpg', '../img/timg (5).jpg', '../img/timg (3).jpg', '../img/timg (1).jpg','../img/timg (4).jpg']
    114                 },
    115                 {
    116                     "title":'标题4',
    117                     "subtitle":['小标题1','小标题2','小标题3'],
    118                     "pic":['../img/timg (1).jpg', '../img/timg (2).jpg', '../img/timg (3).jpg']
    119                 }
    120             ];
    121             
    122             for(var i = 0; i < arr.length; i++){
    123                 var oLi = document.createElement('li');
    124                 oLi.innerHTML = arr[i].title;
    125                 oLi.style.height = Math.floor(parseInt(500/arr.length) - 1) + 'px';
    126                 oLi.index = i;
    127                 if(i == 0){
    128                     oLi.className = 'active';
    129                     changeTab(0);
    130 //                    break;
    131                 }
    132                 oLi.onclick = function(){
    133                     highLight(this);
    134                     subtitle.innerHTML = '';
    135                     changeTab(this.index);
    136                 }
    137                 tabTitlelist.appendChild(oLi);
    138             }
    139             
    140 //            changeTab(0);
    141             
    142             function changeTab(num){
    143                 
    144                 showImage.src = arr[num].pic[0];
    145                 
    146                 
    147                 for(var j = 0; j < arr[num].subtitle.length; j++){
    148                     var aLi = document.createElement('li');
    149                     aLi.innerHTML = arr[num].subtitle[j];
    150                     aLi.style.width = Math.floor(parseInt(800/arr[num].subtitle.length) - 2) + 'px';
    151                     aLi.index = j;
    152                     if(j == 0){
    153                         aLi.className = 'active';
    154                     }
    155                     aLi.onmouseover = function(){
    156                         highLight(this);
    157                         this.parentNode.previousElementSibling.src = arr[num].pic[this.index];                        
    158                     }
    159                     subtitle.appendChild(aLi);
    160                 }
    161             }
    162             
    163             function highLight(ele) {
    164                     var aLi = ele.parentNode.children;
    165                     for(var i = 0; i < aLi.length; i++) {
    166                         aLi[i].className = '';
    167                     }
    168                     ele.className = 'active';
    169                 }
    170         }
    171     </script>
    172 </html>

    最终效果是这样的:

  • 相关阅读:
    vue系列---响应式原理实现及Observer源码解析(七)
    学习Lowdb小型本地JSON数据库
    渐进式web应用开发---Service Worker 与页面通信(七)
    webpack4核心模块tapable源码解析
    electron 创建托盘应用
    运维堡垒机开发
    使用Supervisord软件管理go服务进程
    安装Harbor之http版本
    Ubuntu 18 LTS netplan 网络配置
    用GO开发企业级分布式云存储系统
  • 原文地址:https://www.cnblogs.com/hgs-159/p/6812285.html
Copyright © 2020-2023  润新知