js实现选项卡功能

标题是用无序列表,内容放在div里,内容div里面使用无序列表;

实现逻辑:

1.通过dom操作找到标题里的li;需要给他添加onmouseover事件;

2.给触发了onmouseover事件的li设置效果

3.通过dom操作找到内容里的ul,当触发onmouseover 事件的时候给ul添加display属性;

注意事项:需要使用this关键字,在添加onmouse事件时,需要给标题里的li设置他的index,这样做就可以把内容的ul与标题里的li关联起来;

this 表示使用某个函数的对象

index则返回列表中的索引位置;

代码如下:

var oLi = document.getElementById("nav").getElementsByTagName("li");
var oUl = document.getElementById("content").getElementsByTagName("ul");
for (var i=0;i<oLi.length;i++) {
	oLi[i].index = i;
	/*index 返回列表中选项的索引位置
	本例通过循环,把每个nav中的li的索引记录下来,用来关联content中的li.通过控制nav,来显示相应的内容*/
	oLi[i].onmouseover = function () {
		for(var j=0;j<oLi.length;j++)
		{
			oLi[j].className="";
			this.className="current";	
		}
		for(var j=0;j<oUl.length;j++)
		{
			oUl[j].style.display="none";
			oUl[this.index].style.display="block";
			/*
			记录下来的索引值在这个地方使用,this指添加onmouse事件的oLi[i]
			this.index 就是选中的nav中的li的索引*/
		}
	}
}
css部分需要注意的是不同的选项会显示不一样的内容,涉及到高度的问题;通过overflow属性,值设为hidden;浏览器就会自动根据不同的宽度显示;

代码如下:

body,
ul,
li {
	margin: 0;
	padding: 0;
}

#outer {
	width: 450px;
	margin: 0 auto;
}

#nav {
	background: #000;
	overflow: hidden;
	border: 1px solid #000;
	zoom: 1;
}

#nav li {
	color: #ccc;
	float: left;
	padding: 0 20px;
	list-style-type: none;
	height: 30px;
	line-height: 30px;
}

#nav li.current {
	background: #ccc;
	color: #000;
}
#content{
	border: 1px solid #000;
	border-top-width: 0;
}
#content ul{
	margin: 0 30px;
	padding: 10px 0;
	display: none;
	line-height: 25px;
}

html部分就是无序列表的使用

代码:

<!DOCTYPE html>
<html lang="en">

<head>
	<meta charset="UTF-8">
	<title>Document</title>
	<link rel="stylesheet" href="s.css">
</head>

<body>
	<div id="outer">
		<ul id="nav">
			<li class="current">第一课</li>
			<li>第二课</li>
			<li>第三课</li>
		</ul>
		<div id="content">
			<ul style="display:block;">
				<li>网页特效原理分析</li>
				<li>响应用户操作</li>
				<li>提示框效果</li>
				<li>事件驱动</li>
				<li>元素属性操作</li>
				<li>动手编写第一个js特效</li>
				<li>引入函数</li>
				<li>网页换肤效果</li>
				<li>展开/收缩播放列表效果</li>
			</ul>
			<ul>
				<li>改变网页背景颜色</li>
				<li>函数传参</li>
				<li>高重用性函数的编写</li>
				<li>126邮箱全选效果</li>
				<li>循环及遍历操作</li>
				<li>调试器的简单使用</li>
				<li>典型循环的构成</li>
				<li>for循环配合if判断</li>
				<li>className的使用</li>
				<li>innerHTML的使用</li>
				<li>戛纳印象效果</li>
				<li>数组</li>
				<li>字符串连接</li>
			</ul>
			<ul>
				<li>JavaScript组成:ECMAScript、DOM、BOM,JavaScript兼容性来源</li>
				<li>JavaScript出现的位置、优缺点</li>
				<li>变量、类型、typeof、数据类型转换、变量作用域</li>
				<li>闭包:什么是闭包、简单应用、闭包缺点</li>
				<li>运算符:算术、赋值、关系、逻辑、其他运算符</li>
				<li>程序流程控制:判断、循环、跳出</li>
				<li>命名规范:命名规范及必要性、匈牙利命名法</li>
				<li>函数详解:函数构成、调用、事件、传参数、可变参、返回值</li>
				<li>定时器的使用:setInterval、setTimeout</li>
				<li>定时器应用:站长站导航效果</li>
				<li>定时器应用:自动播放的选项卡</li>
				<li>定时器应用:数码时钟</li>
				<li>程序调试方法</li>
			</ul>
		</div>
	</div>
	<script src="s.js"></script>
</body>

</html>


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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值