用ES5(JavaScript)和ES6面向对象的方式做出选项卡

简介: 用ES5(JavaScript)和ES6面向对象的方式做出选项卡

效果如图所示:

d851aacdad5449a59ba02bc22944bcd6.gif

ES5:

<!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>
    <style>
        #container {
            width: 670px;
            margin: 0;
            padding: 0;
        }
        .box {
            width: 670px;
            height: 400px;
            border: 1px solid black;
            clear: both;
            display: none;
        }
        ul {
            list-style: none;
        }
        ul li {
            float: left;
            width: 200px;
            height: 50px;
            line-height: 50px;
            margin-left: 5px;
            border: 1px solid #ddd;
            text-align: center;
            cursor: pointer;
        }
        .color {
            background-color: brown;
            color: #fff;
        }
    </style>
</head>
<body>
    <div id="container">
        <ul>
            <li class="color">第一页</li>
            <li>第二页</li>
            <li>第三页</li>
        </ul>
        <div class="box" style="display: block;">第一模块</div>
        <div class="box">第二模块</div>
        <div class="box">第三模块</div>
    </div>
    <script>
        var lis = document.querySelectorAll('li');
        var div = document.querySelector('#container').querySelectorAll('div')
        console.log(div);
        for (var i = 0; i < lis.length; i++) {
            lis[i].setAttribute('index', i)
            lis[i].onclick = function () {
                for (var i = 0; i < lis.length; i++) {
                    lis[i].className = ''
                }
                this.className = 'color'
                var index = this.getAttribute('index');
                for (var i = 0; i < div.length; i++) {
                    div[i].style.display = 'none'
                }
                div[index].style.display = 'block'
            }
        }
    </script>
</body>
</html>

ES6写法:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>面向对象-选项卡</title>
    <style>
        #container {
            width: 670px;
            margin: 0;
            padding: 0;
        }
        .box {
            width: 670px;
            height: 400px;
            border: 1px solid black;
            clear: both;
            display: none;
        }
        ul {
            list-style: none;
        }
        ul li {
            float: left;
            width: 200px;
            height: 50px;
            line-height: 50px;
            margin-left: 5px;
            border: 1px solid #ddd;
            text-align: center;
            cursor: pointer;
        }
        .box{
            display: none;
        }
        .color {
            background-color: brown;
            color: #fff;
        }
    </style>
</head>
<body>
<div id="div2">
    <ul>
        <li class="color">第一页</li>
        <li>第二页</li>
        <li>第三页</li>
    </ul>
</div>
<div class="box" style="display:block;">第一模块</div>
<div class="box">第二模块</div>
<div class="box">第三模块</div>
</body>
</html>
<script type="text/javascript">
    window.onload = function () {
        var oTab = new Tab("div2");
    }
    var lis = null;
    var div = null;
    function Tab(id){
        var div2 = document.getElementById(id);
        this.lis = div2.getElementsByTagName('li');//全局变量 转变成属性
        this.div = document.getElementsByClassName('box');
        var _this =this;//将这里的对象this存入_this中,方便在列表点击里面用
        for(i=0;i<this.lis.length;i++){
            this.lis[i].index = i;
            this.lis[i].onclick = function () {
                _this.tab(this);//这里的this指的是列表,把它作为参数传到函数中;
            }
        }
    }
    Tab.prototype.tab = function (lis){//函数 转变成对象的方法
        // alert(this);    //这里的this指的是对象object;
        for(i=0;i<this.lis.length;i++){
            this.lis[i].className = '';
            this.div[i].style.display = 'none';
        }
        lis.className = 'color';
        this.div[lis.index].style.display = 'block';
    }
</script>



相关文章
|
2月前
|
前端开发 JavaScript
JavaScript 面试系列:如何理解 ES6 中 Generator ?常用使用场景有哪些?
JavaScript 面试系列:如何理解 ES6 中 Generator ?常用使用场景有哪些?
|
2月前
|
JavaScript
ES6学习(9)js中的new实现
ES6学习(9)js中的new实现
|
2月前
|
存储 JavaScript 前端开发
JavaScript编程实现tab选项卡切换的效果+1
JavaScript编程实现tab选项卡切换的效果+1
|
11天前
|
JavaScript
js实现的精美彩色tab选项卡切换特效源码
js实现的精美彩色tab选项卡切换特效源码是一段基于JS实现的文件夹tab选项卡切换效果,拥有彩色、单色两种选择,点击标签选项卡可实现相应的变色效果,非常有意思,欢迎对此段代码感兴趣的朋友前来下载使用。
20 2
|
17天前
|
存储 JavaScript 前端开发
JS的ES6知识点
【10月更文挑战第19天】这只是 ES6 的一些主要知识点,ES6 还带来了许多其他的特性和改进,这些特性使得 JavaScript 更加现代化和强大,为开发者提供了更多的便利和灵活性。
15 3
|
28天前
|
JavaScript 前端开发 索引
JavaScript ES6及后续版本:新增的常用特性与亮点解析
JavaScript ES6及后续版本:新增的常用特性与亮点解析
24 4
|
1月前
|
JavaScript
js学习--制作选项卡
js学习--制作选项卡
36 4
|
1月前
|
自然语言处理 JavaScript 前端开发
JavaScript高级——ES6基础入门
JavaScript高级——ES6基础入门
22 1
|
12天前
|
前端开发 JavaScript
JavaScript新纪元:ES6+特性深度解析与实战应用
【10月更文挑战第29天】本文深入解析ES6+的核心特性,包括箭头函数、模板字符串、解构赋值、Promise、模块化和类等,结合实战应用,展示如何利用这些新特性编写更加高效和优雅的代码。
26 0
|
1月前
|
前端开发 JavaScript 小程序
JavaScript的ES6中Promise的使用以及个人理解
JavaScript的ES6中Promise的使用以及个人理解
16 1