老师,我想问下,手动切换选项为什么切换不到对应的图片?

老师,我想问下,手动切换选项为什么切换不到对应的图片?

HTML
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>JS小项目</title>
<link rel="stylesheet" href="css/style.css">
</head>
<body>
<div class="box">
<div class="header">
<ul id="option">
<li><a href="" class="active">首页</a></li>
<li><a href="">点击看看</a></li>
<li><a href="">会自动的</a></li>
<li><a href="">我的网站</a></li>
</ul>
</div>
<div class="main" id="main">
<div class="banner" id="banner">
<a href="">
<div class="banner-slide slide1 slide-active"></div>
</a>
<a href="">
<div class="banner-slide slide2"></div>
</a>
<a href="">
<div class="banner-slide slide3"></div>
</a>
<a href="">
<div class="banner-slide slide4"></div>
</a>
</div>
</div>
</div>
<script src="js/script.js">

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

css
*{
	margin:0;
	padding:0;
}
.box{
	margin:0 auto;
	width:1200px;
}

.header{
	width:1200px;
	height:80px;
	background:#FFF;
}

.header ul li{
	text-align:center;
	line-height:80px;
	float:left;
	width:300px;
	height:80px;
    list-style:none;
    font-weight:bold;
    font-family:Microsoft YaHei;
	font-color:black;
}
.header ul li:hover{background:#FFCC00;} 
a{text-decoration:none;color:black;}

.main{
	width:1200px;
	height:460px;
	overflow:hidden; 
}
.banner{
	width:1200px;
	height:460px;
	overflow:hidden;
	position:relative;
}
.banner-slide{
	width:1200px;
	height:460px;
	background-repeat:no-repeat;
	position:absolute;
	display:none;
}
.slide-active{
	display:block;
}
.slide1{
	background-image:url("../img/1.jpg");
}
.slide2{
	background-image:url("../img/3.jpg");
}
.slide3{
	background-image:url("../img/4.jpg");
}
.slide4{
	background-image:url("../img/5.jpg");
}
 
 #option li.active{
 	background:#FFCC00;
 }

js

//封装一个代替getElementById()的方法

function byId(id){

return typeof(id)==="string"?document.getElementById(id):id;

}


//全局变量

var index=0,

    timer=null,

    pics=byId("banner").getElementsByTagName("div"),

    option=byId("option").getElementsByTagName("li"),

    len=pics.length;


function slideImg(){

changeImg();

var main=byId("main");

//滑过清除定时器,离开继续

main.onmouseover=function(){

    //滑过清除定时器

    if(timer) clearInterval(timer);


}

main.onmouseout=function(){

timer=setInterval(function(){

index++;

if(index>=len){

index=0;

}

            //切换图片

            changeImg();

},1000)                            

}                                               //调用onmouseout事件

//自动在main上触发鼠标离开的事件                                               

main.onmouseout();                              //调用onmouseout方法    


//遍历所有选项,且绑定事件,点击选项切换图片

for(var d=0;d<len;d++){

//给所有li添加一个id的属性,值为d,作为当前li的索引

option[d].id=d;

option[d].onclick=function(){

//改变index为当前li的id值

index=this.id;

//调用changeImg,实现切换图片

changeImg();

}

}                                                           

}



//切换图片

function changeImg(){

//遍历banner下的div及option下所有的li,将div其隐藏,将li清除类

for(var i=0;i<len;i++){

pics[i].style.display="none";

option[i].className="";

}

//根据index索引找到当前div和当前li,将其显示出来和设为当前

pics[index].style.display="block";

option[index].className="active";

}

slideImg();


正在回答

登陆购买课程后可参与讨论,去登陆

2回答

因为你没有给上面设置鼠标放上去的时候停止轮播,你只给下面的main设置了,你需要给box设置才对。

http://img1.sycdn.imooc.com//climg/5b07d251000172a506950276.jpghttp://img1.sycdn.imooc.com//climg/5b07d2690001bfbe08430890.jpg

祝学习愉快!

  • M_莫失莫忘 提问者 #1
    谢谢老师,还有个问题 。就是点击选项时,背景颜色是黄色 ,当点击下一个选项时, 有时前一个点击过的背景黄色还在 ,这是怎么回事?
    2018-05-26 15:10:43
小于飞飞 2018-05-27 17:33:03

根据上传代码,调整建议如下:

 1. 将获取 main 改成box,同时main改成 box (参考上个回复).

2. 给a 标签添加空链接,否则点击就刷新。同时将active 放在 li 上,因为 js 获取的是li , 不是a,所以导致错误。

http://img1.sycdn.imooc.com//climg/5b0a75ad0001d4eb05420120.jpg

3. 鼠标经过样式可以去掉。

http://img1.sycdn.imooc.com//climg/5b0a7ab20001960b02930087.jpg

希望解答你的疑惑,动手实践,祝学习愉快。

问题已解决,确定采纳
还有疑问,暂不采纳

恭喜解决一个难题,获得1积分~

来为老师/同学的回答评分吧

0 星
请稍等 ...
意见反馈 帮助中心 APP下载
官方微信

在线咨询

领取优惠

免费试听

领取大纲

扫描二维码,添加
你的专属老师