6-2作业的疑问
HTML代码如下:
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>JavaScript实现轮播特效项目作业</title>
<link rel="stylesheet" type="text/css" href="css/index.css">
</head>
<body>
<!--主体代码-->
<div class="main" id="main">
<!--导航切换-->
<div class="nav-box clearfix" id="nav-box">
<div class="nav-inner-box">
<a class="nav-item" href="">首页</a>
</div>
<div class="nav-inner-box">
<a class="nav-item" href="">点击查看</a>
</div>
<div class="nav-inner-box">
<a class="nav-item" href="">会自动的</a>
</div>
<div class="nav-inner-box">
<a class="nav-item" href="">我的网站</a>
</div>
</div>
<!--banner切换-->
<div class="banner-box" id="banner-box">
<div class="banner-inner-box">
<a href=""><img src="img/1.jpg"></a>
</div>
<div class="banner-inner-box">
<a href=""><img src="img/2.jpg"></a>
</div>
<div class="banner-inner-box">
<a href=""><img src="img/3.jpg"></a>
</div>
<div class="banner-inner-box">
<a href=""><img src="img/4.jpg"></a>
</div>
</div>
</div>
<script type="text/javascript" src="js/index.js"></script>
</body>
</html>
CSS代码如下:
*{
margin: 0;
padding: 0;
font-family: "Microsoft YaHei";
font-size: 22px;
text-align: center;
margin: 0 auto;
}
/*.clearfix:after{
content: ".";
display: block;
height: 0;
visibility: hidden;
clear: both;
}
.clearfix{
zoom:1;
}*/
a{
text-decoration: none;
background: red;
}
a:link,a:visited{
color:#666;
}
.mian{
width: 100%;
position: relative;
}
.nav-box{
width: 1200px;
height: 80px;
background: #fff;
font-size: 0;
}
.nav-inner-box{
width: 300px;
height: 80px;
line-height: 80px;
color: #666;
display: inline-block;
/*float: left;*/
}
.nav-active{
font-weight: bold;
background-color: #ffcc00;
/*border-radius: 10px;*/
border-top-left-radius: 10px;
border-top-right-radius: 10px;
}
.banner-box{
width: 1200px;
height: 460px;
overflow: hidden;
}
.banner-inner-box a img{
display: block;
}
.banner-active{
position: absolute;
top: 80px;
/*z-index: 10;*/
}
JS代码如下:
// var timer=null,
// index=0,
// banner=byId("banner-box"),
// banners=byId("banner-box").getElementByClassName("banner-inner-box"),
// len=banners.length;
var timer=null,
index=0,
bannerbox=document.getElementById("banner-box"),
banners=bannerbox.getElementsByTagName("div"),
navbox=byId("nav-box"),
navs=navbox.getElementsByTagName("div"),
navitems=document.getElementsByClassName("nav-item"),
len=banners.length;
//封装获取通过id获取对象的方法
function byId(id){
return typeof(id)==="string"?document.getElementById(id):id;
}
//清除时间间隔,停止banner播放
function autoStop(){
if(timer){
clearInterval(timer);
}
}
//设置banner按照顺序自动轮播
function autoPlay(){
timer=setInterval(function() {
index++;
if(index>=len){
index=0;
}
changeImg();
}, 1000);
}
//图片轮播改变样式效果
function changeImg(){
for(var i=0;i<len;i++){
// banners[i].style.display="none";
banners[i].className="banner-inner-box";
navs[i].className="nav-inner-box";
}
// banners[index].className="block";
banners[index].className="banner-inner-box banner-active";
navs[index].className="nav-inner-box nav-active";
}
//鼠标聚焦时停止轮播,以及鼠标失焦时自动轮播
bannerbox.onmouseout=function() {
autoPlay();
}
bannerbox.onmouseover=function() {
autoStop();
}
navbox.onmouseout=function() {
autoPlay();
}
navbox.onmouseover=function() {
autoStop();
}
//导航栏的点击切换
for(var j=0;j<len;j++){
// navs[j].setAttribute("data-id",j);
// navs[j].onclick=function(){
// index=this.getAttribute("data-id");
// changeImg();
navitems[j].setAttribute("data-id",j);
console.log(navitems[j]);
navitems[j].onclick=function(){
index=this.getAttribute("data-id");
// console.log(index);
changeImg();
}
}
问题:
1.在JS代码中,为什么我对导航文字的a标签进行onclick事件,没有切换效果,打印index时能看到对应的0、1、2、3的自定义data-id,但是都是一闪而过。如果我把onclick改成onmouseover事件,切换效果正常。在调试时,因为之前对导航文字a标签的容器进行了onmouseover事件,怕因为这个因素影响,还注释了这段代码,但是依然没有作用。
2.本来在最初的设想里,是对导航文字a标签的容器进行点击事件,但是发现切换效果却只能在容器内点击实现切换(测试正常),但是对导航文字a标签进行点击却没有效果,不知道为什么?我认为导航文字a标签是在容器内的,如果对容器绑定点击事件,容器里的内容也应该在点击事件范围内,不知道我的理解是否错误?10
收起
正在回答
2回答
原因是你给他们绑定了单击时间,这几个按钮都是a超链接,所以当你的标签中的href为空的话,页面会刷新,所以会出现闪的那种情况,你可以给href个值,写成<a class="nav-item" href="#">首页</a>就可以避免这种情况。
但是你的效果还有一个问题,就是绑定的时候,不是给a标签绑定的,是给外面的nav-inner-box绑定的,不然只能点字儿的时候才可以。
还有个问题默认的要让第一章图片显示,并且第一个按钮是选中状态。
另外还有一些细小的样式问题,比如超链接的背景去掉,下划线去掉等。可以再优化一下。
欢迎采纳。
前端小白入门系列课程
- 参与学习 人
- 提交作业 11218 份
- 解答问题 36712 个
从一个不会编程的小白到一个老司机是需要过程的,首先得入门,学习基础知识,然后才能进阶,最后再到精通,本专题是你走进前端世界的不二选择!
了解课程
恭喜解决一个难题,获得1积分~
来为老师/同学的回答评分吧
0 星