当前位置: 首页 > news >正文

闭包--闭包之tab栏切换(四)

实际效果

clipboard.png

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

<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <meta http-equiv="X-UA-Compatible" content="ie=edge">
    <title>Document</title>
    <style>
        ul,
        li {
            list-style: none;
        }

        .tabBox {
            width: 400px;
            height: 400px;
            border: 1px solid #ccc;
        }

        .tabBox ul {
            display: flex;
            border-bottom: 1px solid #000;
        }

        .tabBox ul li {
            flex: 1;
        }

        .tabBox ul li.select {
            background-color: red;
        }

        .tabBox div {
            display: none;
        }

        .tabBox div.select {
            display: block;
        }
    </style>
</head>

<body>
    <div class="tabBox" id="tabBox">
        <ul>
            <li class="select">新闻</li>
            <li>视频</li>
            <li>音乐</li>
        </ul>
        <div class="select">新闻内容</div>
        <div>视频内容</div>
        <div>音乐内容</div>
    </div>
    <script>
        var tabBox = document.getElementById('tabBox'),
            oList = tabBox.getElementsByTagName('li'),
            oDivList = tabBox.getElementsByTagName('div');

        function changeTab(index) {
            for (var i = 0; i < oList.length; i++) {
                oList[i].className = oDivList[i].className = null;
            }
            oList[index].className = oDivList[index].className = "select";
        }
    </script>
</body>

</html>

for循环后,直接调用事件

        for(var i=0;i<oList.length;i++){
            console.log(i) //0,1,2,3
            oList[i].onclick = function(){
                console.log(i)   //3
                changeTab(i)
            }
        }

打开页面后,直接运行for循环,打印出0,1,2,然后执行i++,所以oList[i].onclick之前i=3;
clipboard.png
再次点击tab栏

clipboard.png

给oList[i],新增一个key:Index,

        for (var i = 0; i < oList.length; i++) {
            oList[i].Index = i;
            oList[i].onclick = function() {
                console.log(i)   //3
                console.log(this.Index )  //0,1,2
                changeTab(this.Index)
            }
        }

点击第一个的时候

clipboard.png

闭包1

利用闭包的保存作用

        for (var i = 0; i < oList.length; i++) {
            oList[i].onclick = (function(i) {
                return function(){
                    console.log(i)  //0,1,2
                    changeTab(i)
                }
            })(i)
        }

闭包1,更优雅

利用闭包的保存作用

        for (var i = 0; i < oList.length; i++) {
            (function(i){
                oList[i].onclick = function(){
                    console.log(i) //0,1,2
                    changeTab(i)
                }
            })(i)
        }

es6

let块级作用域

        for (let i = 0; i < oList.length; i++) {
            oList[i].onclick = function(){
                    console.log(i)  //0,1,2
                    changeTab(i)
                }
        }

相关文章:

  • 单据类报表的制作
  • Spring Boot(1)
  • mac终端常用命令
  • ELK 使用小技巧(第 2 期)
  • Workbook导出excel封装的工具类
  • 勒索病毒防范方案-有韩立刚老师总结的非常规手段
  • js导出excel文件
  • Java枚举比较用equals还是==
  • vue两个组件间值的传递或修改方式
  • 如何在国内构建一个硅谷级的高效技术团队?
  • C#中的结构体与类的区别 (转载)
  • 如何用纯 CSS 创作一个记事本翻页动画
  • SpringBoot整合Angular应用第三弹-渲染RestAPI数据
  • CentOS从零开始部署Nodejs项目
  • d6
  • 2017 前端面试准备 - 收藏集 - 掘金
  • Android系统模拟器绘制实现概述
  • JavaSE小实践1:Java爬取斗图网站的所有表情包
  • Java到底能干嘛?
  • Js基础——数据类型之Null和Undefined
  • Netty+SpringBoot+FastDFS+Html5实现聊天App(六)
  • Selenium实战教程系列(二)---元素定位
  • Vim Clutch | 面向脚踏板编程……
  • 检测对象或数组
  • 前嗅ForeSpider教程:创建模板
  • 区块链分支循环
  • 使用 Node.js 的 nodemailer 模块发送邮件(支持 QQ、163 等、支持附件)
  • 推荐一个React的管理后台框架
  • 推荐一款sublime text 3 支持JSX和es201x 代码格式化的插件
  • 微信如何实现自动跳转到用其他浏览器打开指定页面下载APP
  • 移动互联网+智能运营体系搭建=你家有金矿啊!
  • 原生Ajax
  • 源码安装memcached和php memcache扩展
  • 这几个编码小技巧将令你 PHP 代码更加简洁
  • Android开发者必备:推荐一款助力开发的开源APP
  • ​​​​​​​Installing ROS on the Raspberry Pi
  • ​3ds Max插件CG MAGIC图形板块为您提升线条效率!
  • ​io --- 处理流的核心工具​
  • ​比特币大跌的 2 个原因
  • #13 yum、编译安装与sed命令的使用
  • #使用清华镜像源 安装/更新 指定版本tensorflow
  • #数学建模# 线性规划问题的Matlab求解
  • ( 10 )MySQL中的外键
  • (01)ORB-SLAM2源码无死角解析-(66) BA优化(g2o)→闭环线程:Optimizer::GlobalBundleAdjustemnt→全局优化
  • (3)(3.2) MAVLink2数据包签名(安全)
  • (4)logging(日志模块)
  • (7)STL算法之交换赋值
  • (AtCoder Beginner Contest 340) -- F - S = 1 -- 题解
  • (Java数据结构)ArrayList
  • (Redis使用系列) Springboot 整合Redisson 实现分布式锁 七
  • (翻译)Entity Framework技巧系列之七 - Tip 26 – 28
  • (亲测成功)在centos7.5上安装kvm,通过VNC远程连接并创建多台ubuntu虚拟机(ubuntu server版本)...
  • (三)c52学习之旅-点亮LED灯
  • (深度全面解析)ChatGPT的重大更新给创业者带来了哪些红利机会
  • (十七)devops持续集成开发——使用jenkins流水线pipeline方式发布一个微服务项目