前两篇文章主要介绍了类和对象、类的继承,若是想了解更多理论请查阅《ES6学习笔记(一):轻松搞懂面向对象编程、类和对象》、《ES6学习笔记(二):教你玩转类的继承和类的对象》,今天主要来分享关于如何用js面向对象的思惟来实现tab栏的一些相关的功能。javascript
抽像对象: Tab对象 (增删改查功能)
实现功能效果以下图:
首先创建一个class 类Tab:java
let that class Tab { constructor(id) { that=this // 获取元素 this.main = document.getElementById('tab') //获取li的父元素 this.ul = this.main.querySelector('.firstnav ul:first-child') // 获取section的父元素 this.fSection = this.main.querySelector('.tabscon') this.add = this.main.querySelector('.tabadd') this.remove = this.main.querySelectorAll('i') this.init() } //初始化 init() { this.updateNode() // init 初始化操做让相关的元素绑定事件 this.add.onclick = this.addTab for(var i = 0; i<this.lis.length; i++) { this.lis[i].index = i this.lis[i].onclick = this.togggleTab this.remove[i].onclick = this.removeTab this.spans[i].ondblclick = this.editTab this.sections[i].ondblclick = this.editTab } } //咱们动态添加元素,删除元素时,须要重新获取对应的元素 updateNode() { this.lis = this.main.querySelectorAll('li') this.sections = this.main.querySelectorAll('section') this.remove = this.main.querySelectorAll('i') this.spans = this.main.querySelectorAll('span') } //切换功能 togggleTab() {} //清除li和section的class,主要实现切换功能用 clearClass() { for(var i = 0; i< this.lis.length; i++) { this.lis[i].className = '' this.sections[i].className = '' } } //添加功能 addTab() {} //删除功能 removeTab(e) {} // 修改功能 editTab() {} } let tab = new Tab('#tab')
实现的主要代码是:git
that.clearClass() this.className='liactive' that.sections[this.index].className='conactive'
实现功能的主要代码是:github
//建立li元素和section元素 that.clearClass() let li = ' <li class="liactive" ><span>新选项卡</span><i>X</i></li>' let section = '<section class="conactive">新内容区</setion>' that.ul.insertAdjacentHTML('beforeend', li) that.fSection.insertAdjacentHTML('beforeend',section) that.init()
实现功能的主要代码是:编程
e.stopPropagation();//阻止冒泡, let index = this.parentNode.index //根据索引号删除对应的li 和section that.lis[index].remove() that.sections[index].remove() that.init() //当咱们删除的不是选中状态的元素时,原来的选中状态保持不变 if(document.querySelector('.liactive')) return //当咱们删除 了选中状态的生活,让它前一个li处于选中状态 index-- //手动调用click事件,不须要鼠标触发 that.li[index] && that.lis[index].click()
实现功能的主要代码是:app
let str = this.innerHTML //双击禁止选定文字 window.getSelection ? window.getSelection().removeAllRanges() : document.selection.empty() this.innerHTML ='<input type="text" value="'+ str +'"/>' let input = this.children[0] //文本框里面的文字处于选中状态 input.select() //当鼠标离开文本框就把文本框的值给span input.onblur = function() { this.parentNode.innerHTML=input.value } // 按回车键也饿能够把文本框里的值给span input.onkeyup = function(e) { if(e.keyCode === 13) { this.blur() } }
这篇文章主要是经过我学习的技术总结后来分享了如何用面向对象的思路方法来实现tab栏的切换、编辑、增长、删除功能。用到了不少ES6的一些语法。
案例源码地址:https://github.com/qiuqiulanfeng/tab学习