原生JS实现选项卡(种类丰富)(静态,定时调用,悬浮停止)

版权声明:转载请先告知哦 https://blog.csdn.net/PINK789/article/details/88382125

最简单的点击谁显示谁选项卡

<!DOCTYPE html>
<html>
<head>
<title></title>
<style type="text/css">
*{margin:0;padding:0;}li{list-style:none;}
#container{width:600px;margin: 0 auto;}
#nav_wrap{width: 600px;display: flex;justify-content: space-between;border:1px #000 solid;}
#nav_wrap li{flex:1;text-align: center;}
#nr_wrap li{width: 600px;height:300px;text-align: center;line-height: 300px; border:1px #000 solid;display: none;}
.active{background-color: red;}
.block{display: block !important;}
</style>
</head>
<body>
<div id="container">
	<ul id="nav_wrap">
		<li class="active">栏目一</li>
		<li class="">栏目二</li>
		<li class="">栏目三</li>
	</ul>
	<ul id="nr_wrap">
		<li class="block">内容一</li>
		<li>内容二</li>
		<li>内容三</li>
	</ul>
</div>
<script type="text/javascript">
var nav_wrap = document.querySelector("#nav_wrap");
var nav_items = nav_wrap.querySelectorAll("li");
var nr_wrap = document.querySelector("#nr_wrap");
var nr_items = nr_wrap.querySelectorAll("li");
var len = nav_items.length;
//for 循环给每个li添加index值,并且绑定函数
for(var i=0;i<len;i++){
	nav_items[i].index = i;
	nr_items[i].index = i;
	nav_items[i].onclick = function(){
		tab_change(this.index)
	}
	console.log("1");
}

function tab_change(num){
	//循环去掉每个nav_item 和nr_item的class
	for(var i=0;i<len;i++){
		nav_items[i].className="";
		nr_items[i].className=""
	}
	nav_items[num].className="active";
	nr_items[num].className="block"
}
</script>
</body>
</html>

定时切换,内容区mouseover时清除定时器,内容区mouseout时调用定时器

<!DOCTYPE html>
<html>
<head>
	<title></title>
	<style type="text/css">
		*{margin:0;padding:0;}
		#container{width:600px;margin: 0 auto;}
		li{list-style:none;}
		#nav_wrap{width: 600px;display: flex;justify-content: space-between;border:1px #000 solid;}
		#nav_wrap li{flex:1;text-align: center;}
		#nr_wrap li{width: 600px;height:300px;text-align: center;line-height: 300px; border:1px #000 solid;display: none;}
		.active{background-color: red;}
		.block{display: block !important;}
		.nr_item{background-color: red;}
	</style>
</head>
<body>

<div id="container">
	<ul id="nav_wrap">
		<li class="nav_item active">栏目一</li>
		<li class="nav_item">栏目二</li>
		<li class="nav_item">栏目三</li>
	</ul>
	<ul id="nr_wrap">
		<li class="nr_item block">内容一</li>
		<li class="nr_item">内容二</li>
		<li class="nr_item">内容三</li>
	</ul>
</div>
<script type="text/javascript">
{
	var nav_wrap = document.querySelector("#nav_wrap");
	var nav_items = nav_wrap.querySelectorAll("li");
	var nr_wrap = document.querySelector("#nr_wrap");
	var nr_items = nr_wrap.querySelectorAll("li");
	var len = nav_items.length;
	var timer = null;	//定时器
	var num = 0;	//用于计数

	//for 循环给每个li添加index值,并且绑定函数
	for(var i=0;i<len;i++){
		nav_items[i].index = i;
		nr_items[i].index = i;
		nav_items[i].onclick = function(){
			tab_change(this.index)
		}
		//导航li发生点击事件时,清除定时器并且显示点击的导航li索引值一样的内容 li
		nav_items[i].onclick = function(){
			clearInterval(timer);
			num = this.index;
			tab_change(num)
		}
		//内容li发生mouseover事件时,清除定时器
		nr_items[i].onmouseover = function(){
			clearInterval(timer);
			num = this.index;
			tab_change(num);
		}
		//内容li发生mouseout事件,调用定时器,同时传给定时器当前的num值
		nr_items[i].onmouseout = function(){
			num = this.index;
			autoplay(num);
		}
	}
	function tab_change(num){
		//循环去掉每个nav_item 和nr_item的class
		
		for(var i=0;i<len;i++){
			modifyClassName(nav_items[i],"active");
			modifyClassName(nr_items[i],"block");
		}
		nav_items[num].className = nav_items[num].className+" active";
		nr_items[num].className = nr_items[num].className+" block"
	}
	function autoplay(){
		timer = setInterval(function(){
			num++;
			// console.log(num)
			if(num>=len){
				num = 0;
			};
			tab_change(num);
		},1000)
	}
	autoplay()
}
//封装的函数用于删除指定类名
function modifyClassName(ele,deleteClassName,addClassName){	
	var newClassNames;	//删除旧的类名,添加新类名后的数字符串
	// 获取参数元素类名,并使用字符串方法将获取到的类名字符串封装,此处注意复习正则表达式
	var classNames = ele.className.split(/\s+/g); 
	//在类名数组中找要删除的元素位置
	var position = classNames.indexOf(deleteClassName);	
	//排除没有要删除的类名的情况
	if(position>0){
		classNames.splice(position,1);
	}
	//避免参数三为空
	if(addClassName === undefined){
		classNamesNew = classNames.join(" ");
	} else {
		classNamesNew = classNames.join(" ")+ " " + addClassName ;
	}
	ele.className = classNamesNew;
}

</script>
</body>
</html>

猜你喜欢

转载自blog.csdn.net/PINK789/article/details/88382125
今日推荐