前兩篇文章主要介紹了類和對象、類的繼承,若是想了解更多理論請查閱《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學習