前言:

选项卡在项目中经常用到,也经常写,今天在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. HDOJ 5414 CRB and String 模拟

    CRB and String Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/65536 K (Java/Others) T ...

  2. 自定义控件之onMeasure

    最近一直在接触自定义控件的知识,自己就尝试着写了一个小的demo,算是对自定义知识点进行下总结 今天先来看下自定义控件需要重写的三个重要方法 看代码 package com.example.testc ...

  3. mysql 数据库 存储数据类型

    int 类型的数据  可以在数据库里存成 char字符串类型的数据: 纯数字的字符串 可以在数据库里存储为 int的数据类型.

  4. wpf app全局变量传参方法(代码片段 )

    清空某行绑定的行数据: int RowIndex = datagrid.SelectedIndex; _Table.Rows[RowIndex]["AVERAGE_PRICE"] ...

  5. [React] Define defaultProps and PropTypes as static methods in class component

    class Toggle extends Component { static propTypes = { defaultOn: PropTypes.bool, on: PropTypes.bool, ...

  6. javascript创建对象的方法--工厂模式(非常好理解)

    javascript创建对象的方法--工厂模式(非常好理解) 一.简介 创建对象的方法 本质上都是把"属性"和"方法",封装成一个对象 创建对象的基本模式 普通 ...

  7. ZOJ 2301 Color the Ball 线段树(区间更新+离散化)

    Color the Ball Time Limit: 2 Seconds      Memory Limit: 65536 KB There are infinite balls in a line ...

  8. CISP/CISA 每日一题 四

    CISA 每日一题(答) 连续在线审计技术: 1.系统控制审计检查文件和内嵌审计模型(SCARF/EAM):非常复杂,适用于正常处理不能被中断:通过在组织的主机应用系统中内嵌经特别编写的审计软件,使审 ...

  9. WPF 入门《数据绑定》

    简单而言, 数据绑定是一种关系, 这种关系告诉WPF 从一个源目标对象中提取一些信息, 并且使用该信息设置为目标对象的属性.目标属性总是依赖项属性, 并且通常位于WPF元素中. 然而, 源对象可以是任 ...

  10. springMVC注解用法:@modelattribute的用法

    在Spring MVC里,@ModelAttribute通常使用在Controller方法的参数注解中,用于解释model entity,但同时,也可以放在方法注解里. 如果把@ModelAttrib ...