案例:tab栏切换功能(原生JS写法)

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

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

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

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

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

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

<div class="tab_list">
    <ul>
        <li class="current">商品介绍</li>
        <li>规格与包装</li>
        <li>商品评价(50000)</li>
        <li>售后保障</li>
        <li>手机社区</li>
    </ul>
</div>    
<div class="detail_tab_con" style="display: block;">
    <div class="item">与商品介绍的内容相对应</div>
    <div class="item">与规格与包装的内容相对应</div>
    <div class="item">与商品评价(50000)的内容相对应</div>
    <div class="item">与售后保障的内容相对应</div>
    <div class="item">与手机社区的内容相对应</div>
</div>

<script>
    // 1.上面的模块选项卡,点击某一个,当前这个底色会是红色,其余不变(排他思想),修改类名的方式
    // 获取元素
    var tab_list = document.querySelector('.tab_list');
    var lis = tab_list.querySelectorAll('li');
    var items = document.querySelectorAll('.item');
    // for循环绑定点击事件
    for (var i = 0; i < lis.length; i++) {
        // 开始给5个小li设置索引号(自定义属性)
        lis[i].setAttribute('index', i);
        lis[i].onclick = function() {
            // 首先清除其余li的当前选中的class类样式
            for (var i = 0; i < lis.length; i++) {
                lis[i].className = '';
            }
            // 然后再给当前选中的li添加当前选中的class类样式
            this.className = 'current';
            // 下面的显示内容模块
            var index = this.getAttribute('index');
            // 首先隐藏其他item的内容
            for (var i = 0; i < items.length; i++) {
                items[i].style.display = 'none';
            }
            // 然后只显示当前选中的tab栏内容
            // display: block不仅有转换为块元素的意思,也有显示的意思
            items[index].style.display = 'block';
        }
    }
</script>

 

posted @ 2020-05-21 22:31  浮华夕颜  Views(830)  Comments(0Edit  收藏  举报