点击切换报错

点击切换报错

我看了一下发现是ID没有赋值上去,这是为啥欸?
最后我直接在div上写上ID就可以了。。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
<!DOCTYPE html>
<html>
<head>
    <meta charset="utf-8">
    <title>轮播图</title>
    <link rel="stylesheet" type="text/css" href="css/index.css">
</head>
<body>
    <!-- 头部 -->
    <div class="header" id="header">
        <!-- 上方标签 -->
        <div class="tips" id="tips">
            <div class="active">首页</div>
            <div>贯穿全站</div>
            <div>体验</div>
            <div>携手前后端</div>
        </div>
        <!-- banner轮播图 -->
        <div class="banner" id="banner">
            <a href="">
                <div class="banner-slide slide1 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>
    <script type="text/javascript" src="js/index.js"></script>
</body>
</html>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
// 封装document.getElementById
function byId(idname){
    return typeof(idname)==="string"?document.getElementById(idname):idname;
}
 
var index=0,
    timer=null,
    pics=byId("banner").getElementsByTagName("div"),
    tips=byId("tips").getElementsByTagName("div"),
    len=pics.length;
 
//轮播效果
function slideImg(){
    var banner=byId("banner"),
        header=byId("header");
    //鼠标滑过停止
    header.onmouseover=function(){
        if(timer){
            clearInterval(timer);
        }
    }
 
    //鼠标离开继续轮播
    header.onmouseout=function(){
        timer=setInterval(function(){
            index++;
            if(index==len){
                index=0;
            }
            changeImg();
        },1000);
    }
}
 
function changeImg(){
    for(var i=0;i<len;i++){
       tips[i].className = "";
       pics[i].style.display = "none";
   }
    tips[index].className="active";
    pics[index].style.display="block";
     
}
 
//点击标签切换
for(var i=0;i<len;i++){
    tips.id=i;
    tips[i].onclick=function(){
        index=this.id;
        changeImg();
    }
}
 
slideImg();


正在回答

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

4回答

不知道你有没有听过ID是唯一的。你的tips就是通过ID定义,你又反向给他定义一个新的id?

  • 活在梦里_JPG 提问者 #1
    JS代码中的tips是 tips下的div 先把代码看全 不过托你的福 我也知道错在哪里了
    2017-09-12 12:21:29
美丽赵 2017-09-11 20:06:57

id并没有赋上去,原因是:在调用slideImg()方法后, 点击标签切换是永远也执行不到的。

for循环应该放在 slideImg()方法里,最好是在header.onmouseout()方法后。

还有:27行最好写成这样:if(index>=3) index=0;

还有:34行最好加上一句:header.onmouseout();

不要问为什么?请看视频..


  • 还有一句47行,应该是这样:tips[i].id=i; var a=
    2017-09-11 20:11:06
  • 47行:tips[i].id = "my_"+i ; 49行:var a = this.id.split("_");
    2017-09-11 20:14:49
  • 再加一句:index=a[1] ;
    2017-09-11 20:15:40
提问者 活在梦里_JPG 2017-09-11 12:20:58
1
2
3
4
5
6
7
8
//点击标签切换
for(var i=0;i<len;i++){
    tips.id=i;
    tips[i].onclick=function(){
        index=this.id;
        changeImg();
    }
}

这一段不是定义ID了吗,视频里的代码也是这样的,,,
还有就是图片切换的时候会出现一瞬间的空白  这是为什么

樱桃小胖子 2017-09-11 11:35:43

首先要在html中定义id,才能在js中获取到这个id。你刚开始没有在html中定义id,因此在js中是获取不到的,祝学习愉快!

  • 提问者 活在梦里_JPG #1
    //点击标签切换 for(var i=0;i<len;i++){ tips.id=i; tips[i].onclick=function(){ index=this.id; changeImg(); } } 这一段不是定义ID了吗,视频里的代码也是这样的,,, 还有就是图片切换的时候会出现一瞬间的空白 这是为什么
    2017-09-11 12:22:08
问题已解决,确定采纳
还有疑问,暂不采纳

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

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

0 星
请稍等 ...
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号

在线咨询

领取优惠

免费试听

领取大纲

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