当前位置: 首页 > 面试题库 >

说说用原生js实现封装一个选项卡的功能

齐承运
2023-03-14
本文向大家介绍说说用原生js实现封装一个选项卡的功能相关面试题,主要包含被问及说说用原生js实现封装一个选项卡的功能时的应答技巧和注意事项,需要的朋友参考一下

Tab栏切换(重点)

这是一个重点案例,是前端人员的必备技能!!你必须要把这个案例给写会!!!!

案例分析

①Tab栏切换有2个大的模块

②上的模块选项卡,点击某一个,当前这一个底色会是红色,其余不变(排他思想) 修改类名的方式

③下面的模块内容,会跟随上面的选项卡变化。所以下面模块变化写到点击事件里面。

④规律:下面的模块显示内容和上面的选项卡一一对应,相匹配。

⑤核心思路: 给上面的tab_list 里面的所有小li 添加自定义属性,属性值从0开始编号。

(这个案例里面用到了自定义属性!!!!!!!!!!!!!!)

⑥ 当我们点击tab_list 里面的某个小li,让tab_con 里面对应序号的 内容显示,其余隐藏(排他思想)

<script>
       var tab_list = document.querySelector('.tab_list');
       var lis = tab_list.querySelectorAll('li');

       for(var i = 0; i < lis.length; i++){
            lis[i].onclick = function(){
                for(var j = 0; j < lis.length; j++){
                    lis[j].className = '';
                }
                this.className = 'current';
            }
       }
    </script>

这个是做上面的模块所用的样式代码

<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <title>Document</title>
    <style>
        * {
            margin: 0;
            padding: 0;
        }
        
        li {
            list-style-type: none;
        }
        
        .tab {
            /*这个是最大的盒子*/
            width: 978px;
            margin: 100px auto;
        }
        
        /*大盒子里的上盒子*/
        .tab_list {
            /*没给宽,默认和父亲一样宽*/
            height: 39px;
            border: 1px solid #ccc;
            background-color: #f1f1f1;
        }
        
        .tab_list li {
            float: left;
            height: 39px;
            line-height: 39px;
            padding: 0 20px;
            text-align: center;
            cursor: pointer;
        }
        
        .tab_list .current {
            background-color: #c81623;
            color: #fff;
        }

        .item {
            /*也不保留位置*/
            display: none;
        }
    </style>
</head>

<body>
  	<!--大盒子叫tab,里面有上下2个盒子,一个叫tab_list,一个叫tab_con-->
  	<!--tab_list里面有5个li-->
    <!--tab_con里面有5个div-->
  	<!--5个li和5个div是一一对应的关系-->
    <div class="tab">
        <div class="tab_list">
            <ul>
                <li class="current">商品介绍</li>
                <li>规格与包装</li>
                <li>售后保障</li>
                <li>商品评价(50000)</li>
                <li>手机社区</li>
            </ul>
        </div>
        
        <div class="tab_con">
            <!-- block除了有转为块级元素以外,还有显示的意思 -->
            <!-- 行内元素层级高,把上面的display:none给覆盖了 -->
            <div class="item" style="display: block;">
                商品介绍模块内容
            </div>
            <div class="item">
                规格与包装模块内容
            </div>
            <div class="item">
                售后保障模块内容
            </div>
            <div class="item">
                商品评价(50000)模块内容
            </div>
            <div class="item">
                手机社区模块内容
            </div>
        </div>
        
    </div>
    <script>
        //1. 上的模块选项卡:点击某一个,当前这一个底色会是红色,其余不变(排他思想) 修改类名的方式
        // 获取元素
        var tab_list = document.querySelector('.tab_list');
        /*5个li对应的是5个item*/
        var lis = tab_list.querySelectorAll('li');
        var items = document.querySelectorAll('.item');
       
      	//里面有5个小li,必定要用循环
        //for循环绑定点击事件
        for(var i = 0; i < lis.length; i++){
            //开始给5个小li设置一个自定义属性:索引号index
            lis[i].setAttribute('index',i)
          	//所有的孩子都要有onclick绑定事件
            lis[i].onclick = function(){
                //排他思想:干掉所有人,其余的li清除class这个类
                for(var i = 0; i < lis.length; i++){
                    lis[i].className = '';
                }
                //留下我自己
                this.className = 'current';
                
                //2.下面的显示内容模块
              	//得到当前的属性的值
                var index = this.getAttribute('index');
                // console.log(index);
                //再用一次排他思想:干掉所有人,让其余的item 这些div隐藏
                for(var j = 0; j < items.length; j++){
                    items[j].style.display = 'none';
                }
                //留下我自己 让对应的item显示出来
                items[index].style.display = 'block';
            }
        }
    </script>
</body>

</html>

这个是2个模块都完成的最终代码。(这个我独立写我也写不出来)

 类似资料:
  • 本文向大家介绍原生javascript实现Tab选项卡切换功能,包括了原生javascript实现Tab选项卡切换功能的使用技巧和注意事项,需要的朋友参考一下 分析个人用原生JS获取类名元素的代码:   parent参数是可选的,但需要先判断它是否存在,且是节点dom元素 parent != undefined&&parent.nodeType==1 ,nodeType == 1可以判断节点是否为

  • 本文向大家介绍说说 Dubbo 的实现原理相关面试题,主要包含被问及说说 Dubbo 的实现原理时的应答技巧和注意事项,需要的朋友参考一下 dubbo 作为 rpc 框架,实现的效果就是调用远程的方法就像在本地调用一样。如何做到呢?就是本地有对远程方法的描述,包括方法名、参数、返回值,在 dubbo 中是远程和本地使用同样的接口;然后呢,要有对网络通信的封装,要对调用方来说通信细节是完全不可见的,

  • 本文向大家介绍说说 RPC 的实现原理相关面试题,主要包含被问及说说 RPC 的实现原理时的应答技巧和注意事项,需要的朋友参考一下 首先需要有处理网络连接通讯的模块,负责连接建立、管理和消息的传输。其次需要有编解码的模块,因为网络通讯都是传输的字节码,需要将我们使用的对象序列化和反序列化。剩下的就是客户端和服务器端的部分,服务器端暴露要开放的服务接口,客户调用服务接口的一个代理实现,这个代理实现负

  • 本文向大家介绍原生js实现对Ajax的封装(仿jquery),包括了原生js实现对Ajax的封装(仿jquery)的使用技巧和注意事项,需要的朋友参考一下 前言 众所周知,jquery在我们日常开发中的使用频率非常高,与js相比,我们省去了冗长的获取元素的代码,不用考虑一些麻烦的兼容问题,更加方便的动画实现,以及更加方便的方法调用让我们觉得jquery真是越用越舒服。但是jquery说到底还是对j

  • 本文向大家介绍js实现tab选项卡切换功能,包括了js实现tab选项卡切换功能的使用技巧和注意事项,需要的朋友参考一下 话不多说,请看代码: 以上就是本文的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,同时也希望多多支持呐喊教程!

  • 本文向大家介绍原生javascript实现的ajax异步封装功能示例,包括了原生javascript实现的ajax异步封装功能示例的使用技巧和注意事项,需要的朋友参考一下 本文实例讲述了原生javascript实现的ajax异步封装功能。分享给大家供大家参考,具体如下: 更多关于JavaScript相关内容感兴趣的读者可查看本站专题:《JavaScript中ajax操作技巧总结》、《JavaScr