【前端】Javascript高級篇-tab切換欄(案例1)

效果圖

在這裏插入圖片描述

面向對象

在這裏插入圖片描述

實戰代碼

index.html

<!DOCTYPE html>
<html>
	<head>
		<meta charset="utf-8" />
		<title></title>
	</head>
	<body>
		<h4>Js面向對象 tab 動態增加</h4>
		<div class="tabs-box" id="tab">
			<nav>
				<ul>
					<li class="liactive"><span>xx</span> </li>
					<li class="liactive"><span>xx</span> </li>
					<li class="liactive"><span>xx</span> </li>					
				</ul>
				<div class="tab-add">
					<span>+</span>
				</div>
			</nav>
			<div class="tab-section"> 
				<section>測試1</section>
				<section>測試2</section>
			</div>
		</div>
	</body>
		<script src="js/tab.js"></script>
</html>

tab.js一lis綁定點擊事件和序號

class Tab {
	constructor(id) {
	    // 獲取元素
		this.main = document.querySelector(id)
		this.lis = document.querySelectorAll('li')
		this.section = document.querySelectorAll('section')
		this.init()
	}
	
		// 初始化綁定相關元素
	init() {
		for(var i = 0; i < this.lis.length; i++) {
			this.lis[i].index = i
			this.lis[i].onclick = function() {
				console.log(this.index)
			}
		}
	}
	
	// 切換
	toggleTab() {
		
	}
	
	// 添加
	addTab() {
		
	}
	// 刪除
	removeTab() {
		
	}
	// 修改
	eidtTab() {
		
	}
}

new Tab('#tab')

效果圖

在這裏插入圖片描述

代碼:優化樣式+(切換+清除樣式)

<!DOCTYPE html>
<html>
	<head>
		<meta charset="utf-8" />
		<title></title>
		<style type="text/css">
			.ul {
				display: flex;
				flex-direction: row;
				align-content: space-between;
				list-style-type:none
			}
	
			.liactive {
				border: 2px solid black;
			}
			.sec {
				border: 2px solid skyblue;
			}
		</style>
	</head>
	<body>
		<h4>Js面向對象 tab 動態增加</h4>
		<div class="tabs-box" id="tab">
			<nav class="nav">
				<ul class="ul">
					<li class="liactive"><span>一兩</span> </li>
					<li ><span>一塊</span> </li>
					<li ><span>一款</span> </li>					
				</ul>
				<div class="tab-add">
					<span>+</span>
				</div>
			</nav>
			<div class="tab-section"> 
				<section class="sec">測試1</section>
				<section>測試2</section>
				<section>測試3</section>
			</div>
		</div>
	</body>
	<script src="js/tab.js"></script>
</html>

js

var that
class Tab {
	constructor(id) {
		that = this
	    // 獲取元素
		this.main = document.querySelector(id)
		this.lis = document.querySelectorAll('li')
		this.sections = document.querySelectorAll('section')
		this.init()
	}
	// 	清除樣式
	clearClass() {
		for (var i = 0; i < this.lis.length; i++) {
			this.lis[i].className = '',
			this.sections[i].className = ''
		}
	}
	
	// 初始化綁定相關元素
	init() {
		for(var i = 0; i < this.lis.length; i++) {
			this.lis[i].index = i
			this.lis[i].onclick = this.toggleTab
		}
	}
	
	// 切換
	toggleTab() {
		// 先清空
		that.clearClass()
		// 點誰就給誰添加樣式
		console.log(this.index)
		this.className = 'liactive'
		that.sections[this.index].className = 'sec' // 注意當前this表示lis
	}
	
	// 添加
	addTab() {
		
	}
	// 刪除
	removeTab() {
		
	}
	// 修改
	eidtTab() {
		
	}
}

new Tab('#tab')

效果圖

在這裏插入圖片描述

增加

先增加 li 和 section 然後追加到列表中

添加點擊事件

var that
class Tab {
	constructor(id) {
		that = this
	    // 獲取元素
		this.main = document.querySelector(id)
		this.lis = this.main.querySelectorAll('li')
		this.sections = this.main.querySelectorAll('section')
		this.add = this.main.querySelector('.tab-add')
		this.init()
	}
	// 	清除樣式
	clearClass() {
		for (var i = 0; i < this.lis.length; i++) {
			this.lis[i].className = '',
			this.sections[i].className = ''
		}
	}
	
	// 初始化綁定相關元素
	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.toggleTab
		}
	}
	
	// 切換
	toggleTab() {
		// 先清空
		that.clearClass()
		// 點誰就給誰添加樣式
		console.log(this.index)
		this.className = 'liactive'
		that.sections[this.index].className = 'sec' // 注意當前this表示lis
	}
	
	// 添加
	addTab() {
		alert(11)
	}
	// 刪除
	removeTab() {
		
	}
	// 修改
	eidtTab() {
		
	}
}

new Tab('#tab')

爲節約時間選擇性實現,後續大家感興趣可以看教程瞭解跟進
https://www.bilibili.com/video/BV1YJ411L75N?p=14

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章