104-(面向对象)tab切换

<!DOCTYPE html>
<html lang="en">
<head>
	<meta charset="UTF-8">
	<title>Document</title>
	<style>
		.change{
			width: 600px;
			margin: 100px auto;
		}
		.title{
			overflow: hidden;
		}
		.title span{
			float: left;
			width: 198px;
			height: 40px;
			line-height: 40px;
			text-align: center;
			border: 1px solid #000;
		}
		.title .active{
			background-color: orange;
			color: #fff;
		}
		.content p{
			width: 598px;
			height: 200px;
			border: 1px solid #000;
			line-height: 200px;
			text-align: center;
			display: none;
			transition: all .5s;
		}
		.content .select{
			display: block;
			
		}
	</style>
</head>
<body>
	<div class="change">
		<!-- 点击交互区域 -->
		<div class="title">
			<span class="active">标题1</span>
			<span>标题2</span>
			<span>标题3</span>
		</div>
		<!-- 显示切换内容区域 -->
		<div class="content">
			<p class="select">内容1</p>
			<p>内容2</p>
			<p>内容3</p>
		</div>
	</div>
	<script type="text/javascript">
		// 1.变量---属性
		// 2.函数---方法
		// 3.构造函数添加属性		
		// 4.用原型链添加方法
		// 
		
		// 1.变量
		// var spanArr = document.querySelectorAll('.title span');
		// var pArr = document.querySelectorAll('.content p');
		// for(var i = 0; i < spanArr.length; i++) {
		// 	spanArr[i].index = i;
		// 	spanArr[i].onclick = function() {
		// 		// 主要的实现逻辑
		// 		document.querySelector('.active').className = '';
		// 		document.querySelector('.select').className = '';

		// 		this.className = 'active';
		// 		pArr[this.index].className = 'select';
		// 	}
		// }


		function ChangeTab(btn, content) {
			// 1和3.变量---属性
			this.btnArr = document.querySelectorAll(btn);
			this.contentArr = document.querySelectorAll(content);
			

			// 当函数嵌套函数的时候, this指向会被改变
			var _this = this;
			console.log('第一个this',this);
			
			for(var i = 0; i < this.btnArr.length; i++) {
				_this.btnArr[i].index = i; // index叫啥都行
				this.btnArr[i].onclick = function() {
					// 主要的实现逻辑
					// 4.用原型链添加方法
					// 
					// 主要的实现逻辑
					// document.querySelector('.active').className = '';
					// document.querySelector('.select').className = '';

					// this.className = 'active';
					// pArr[this.index].className = 'select';
					// 调用原型上的方法
					_this.change(this);
					console.log('第二个this',this);
					
				}
			}
		}

		// 用原型链添加共享方法
		ChangeTab.prototype.change = function(eleObj) {
			document.querySelector('.active').className = '';
			document.querySelector('.select').className = '';

			// this.className = 'active';
			// pArr[this.index].className = 'select';

			eleObj.className = 'active';
			this.contentArr[eleObj.index].className = 'select';
		}


		var tab = new ChangeTab('.title span', '.content p');
	</script>
</body>
</html>

 上述运行结果:

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

七色的天空

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值