前言:

选项卡在项目中经常用到,也经常写,今天在github突然看到一个面向对象的写法,值得收藏和学习。

本文内容摘自github上的 helloforrestworld/javascriptLab ,稍作删减和整理,仅作记录和自学用途。在此感谢原作者。

html代码如下:

<div class="tab_wrap">
<div class="tab_item" id="tab1">
<div class="btns">
<span class="active">菜单1</span>
<span>菜单2</span>
<span>菜单3</span>
</div>
<div class="container">
<p class="active">11111</p>
<p>22222</p>
<p>33333</p>
</div>
</div>
<div class="tab_item" id="tab2">
<div class="btns">
<span class="active">栏目一</span>
<span>栏目二</span>
<span>栏目三</span>
<span>栏目四</span>
</div>
<div class="container">
<p class="active">内容一</p>
<p>内容二</p>
<p>内容三</p>
<p>内容四</p>
</div>
</div>
</div>

css代码如下:

.tab_wrap {
/*width: 60%;*/
margin: 0 auto;
background-color: #f0f0f0;
display: flex;
} .tab_item {
width: 300px;
box-shadow: 2px 0px 4px rgba(0, 0, 0, 2);
margin: 0 40px; } .btns {
display: flex;
align-items: center;
justify-content: center;
} .btns span {
flex:;
display: block;
text-align: center;
border-bottom: 2px solid #000;
padding: 5px 0;
transition: 200ms;
cursor: default;
} .btns span:hover {
border-bottom: 2px solid rgb(46, 131, 242);
} .btns span.active {
border-bottom: 2px solid rgb(46, 131, 242);
background-color: rgba(46, 131, 242, .2);
} .container {
height: 260px;
} .container p {
display: none;
padding:;
margin:;
width: 100%;
height: 100%;
text-align: center;
line-height: 260px;
} .container p.active {
display: block;
}

重点来了,js代码如下:

<script>
// 构造函数
function Tab(item){
var tab = document.getElementById(item); this.btns = tab.querySelectorAll('span');
this.texts = tab.querySelectorAll('p');
this.prev = 0;
this.len = this.btns.length; this.current = 0; return this;
} Tab.prototype.toTap = function(){
var _this = this;
for (var i = 0; i < this.len; i++) {
this.btns[i].index = i;
this.btns[i].onclick = function(){
_this.play(this.index)
}
}
} Tab.prototype.play = function (index) { this.btns[this.prev].classList.remove('active');
this.texts[this.prev].classList.remove('active'); this.btns[index].classList.add('active');
this.texts[index].classList.add('active'); this.prev = index;
} var tab1 = new Tab('tab1');
tab1.toTap();
var tab2 = new Tab('tab2');
tab2.toTap();
</script>

总结:

该方法代码简洁语义明了。定义一个构造函数,在该函数原型上添加方法。在需要的地方new一个实例即可,可重用性非常高。

js面向对象的选项卡的更多相关文章

  1. 原生js面向对象编程-选项卡(自动轮播)

    <!DOCTYPE html> <html> <head lang="en"> <meta charset="UTF-8&quo ...

  2. 原生js面向对象编程-选项卡(点击)

    <!DOCTYPE html> <html> <head lang="en"> <meta charset="UTF-8&quo ...

  3. [Js]面向对象的选项卡实例

    中间过渡环节:把面向过程的程序,改写成面向对象的形式 <html xmlns="http://www.w3.org/1999/xhtml"><head>&l ...

  4. js面向对象+一般方法的选项卡

    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...

  5. js - 面向对象 - 小案例:轮播图、随机点名、选项卡、鼠标拖拽

    面向对象 对象 : (黑盒子)不了解内部结构, 知道表面的各种操作. 面向对象 : 不了解原理的情况下 会使用功能 . 面向对象是一种通用思想,并非编程中能用,任何事情都能用. 编程语言的面向对象的特 ...

  6. 第十五节 JS面向对象实例及高级

    实例:面向对象的选项卡 把面向过程的程序,改写成面向对象的形式 原则:不能有函数套函数,但可以有全局变量 过程: onload —— 改写成 构造函数,其中window.onload的功能是在页面加载 ...

  7. js面向对象高级编程

    面向对象的组成 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www ...

  8. js面向对象、创建对象的工厂模式、构造函数模式、原型链模式

    JS面向对象编程(转载) 什么是面向对象编程(OOP)?用对象的思想去写代码,就是面向对象编程. 面向对象编程的特点 抽象:抓住核心问题 封装:只能通过对象来访问方法 继承:从已有对象上继承出新的对象 ...

  9. ES6学习笔记(三):教你用js面向对象思维来实现 tab栏增删改查功能

    前两篇文章主要介绍了类和对象.类的继承,如果想了解更多理论请查阅<ES6学习笔记(一):轻松搞懂面向对象编程.类和对象>.<ES6学习笔记(二):教你玩转类的继承和类的对象>, ...

随机推荐

  1. kafka自带没web ui界面,怎么办?安装个第三方的

    见 基于Web的Kafka管理器工具之Kafka-manager的编译部署详细安装 (支持kafka0.8.0.9和0.10以后版本)(图文详解)(默认端口或任意自定义端口)  

  2. BZOJ离线版

    http://dh.attack.cf/bzoj/ 闲来无事自己搞的 可以查看权限题 至于这个东西怎么搞, 可以私信我2333 网站已经挂掉. 想看的可以去rxz大爷的blog http://ruan ...

  3. SqlDatasource简单用法

    http://blog.csdn.net/zxf1by1/article/details/7055015 增删改查和前台页面(拖拽过来的,但是包含参数的)

  4. Kinect 开发 —— 手势识别(上)

    像点击(clicks)是GUI平台的核心,轻点(taps)是触摸平台的核心那样,手势(gestures)是Kinect应用程序的核心 关于手势的定义的中心在于手势能够用来交流,手势的意义在于讲述而不是 ...

  5. apache2 虚拟机多用户多站点设置 mpm-itk

    MPM设置 https://bbs.csdn.net/topics/390479795/ vim /opt/lampp/etc/extra/httpd-ssl.conf vim /opt/lampp/ ...

  6. js34

    <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/stri ...

  7. 求第k大的数(用到快速排序算法的思想)

    //下面两种part效率比较:相同运算量下part比part2快5倍左右,part2写法简单但是效率低 #include "stdafx.h" #include <iostr ...

  8. 17.Node.js 回调函数--异步编程

    转自:http://www.runoob.com/nodejs/nodejs-tutorial.html Node.js 异步编程的直接体现就是回调. 异步编程依托于回调来实现,但不能说使用了回调后程 ...

  9. MariaDB 安装 (YUM)

    在CentOS 7.0安装MariaDB的数据库,在这里记录下安装过程,以便以后查看. 1. 安装MariaDB 安装命令 yum -y install mariadb mariadb-server ...

  10. code-代码平台服务器路径

    下面记录的是各个平台的服务器路径(va使用) ("repo init -u ssh://vanzo/platform_89/manifest.git") ("repo i ...