不能实现自动轮播,请问是哪里的问题,请指教

不能实现自动轮播,请问是哪里的问题,请指教

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
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>js轮播图</title>
<link rel="stylesheet" type="text/css" href="css/jstyle.css">
    <script type="text/javascript" src="js/index.js"></script>
</head>
<body>
<div class="canvas" id="main">
<!--切换项标题-->
<div class="title" >
<ul id="item">
    <div class="active"><a href="#">首页</a></div>
<div class=""><a href="#">点击看看</a></div>
<div class=""><a href="#">会自动的</a></div>
<div class=""><a href="#">我的网站</a></div>
   </ul>
</div>
<!--切换项内容-->
<div class="box" id="photoes">
<div class="slide one picActive"></div>
<div class="slide two"></div>
<div class="slide three"></div>
<div class="slide four"></div>
</div>
</div>
</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
55
56
57
58
59
60
61
62
63
64
65
/*全局定义*/
*{
margin: 0;
padding: 0;}
.canvas{
    width: 1000px;
    height:553px;
    margin: 0 auto; 
}
/*切换项标题*/
.title{
    width: 1000px;
    height: 50px;
}
.title ul{
    width: 1000px;
    height: 50px;
}
.title ul>div{
    width: 250px;
    line-height: 50px;
    float: left;
    text-align: center;
    background-color:#fff;
}
 
.title .active{
    background-color:#ffcc00;
    border-radius: 8px;
    cursor: pointer;
}
.title ul>div a{
    font-size: 24px;
    color:#666;
    text-decoration: none;
}
/*切换项内容*/
.box{
    width: 1000px;
    height: 500px;
    overflow: hidden;
}
.slide{
    width: 100%;
    height: 100%;
    float: left;
    display: none;
}
.picActive{
    display: block;
}
.one{
    background-image: url(../img/1.jpg);
}
.two{
    background-image: url(../img/3.jpg);
}
 
.three{
    background-image: url(../img/4.jpg);
}
 
.four{
    background-image: url(../img/5.jpg);
}
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
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
window.onload=function(){
    //声明全局变量
    var timer=null,//间歇调用次数
        index=0,//index为当前索引
        item=byId('item'),//标题项
        items=item.getElementsByTagName('div'),
        size=items.length,
        photoes=byId('photoes').getElementsByTagName('div'),
        pics=photoes.length;
                
//兼容不同浏览器的事件方法     
function addHandler(element, type, handler) {
    if (element.addEventListener) {
        element.addEventListener(type, handler, true);
    }
    else if (element.attachEvent) {
        element.attachEvent('on' + type, handler);
    }
    else {
        element['on' + type] = handler;
    }
}
//封装获得id的方法
function byId(id){
    return typeof(id)==="string"?document.getElementById(id):id;
}
//使用间歇调用,每秒切换图片
function startAutoPlay(){
    timer = setInterval(function(){
        index++;
        if (index>pics) {
            index=0;
        }
        changeImg();
    },1000)
}
//停止图片轮播
function stopAutoPlay(){
    if (timer) {
        clearInterval(timer);
    }
}
//使图片自动轮播
function changeImg(){
 for (var j = 0; j < pics; j++) {
   photoes[j].style.display='none';
   items[j].className='';
 }
   photoes[index].style.display='block';
   items[index].className='active';
}
function slideImg(){
    startAutoPlay();
    var  main=byId('main');
addHandler(main,'mouseout',startAutoPlay());
addHandler(main,'mouseover',stopAutoPlay());
}
// 点击选项跳转图片
//遍历title选项,获得新建属性索引
for (var m = 0; m < size; m++) {
    items[m].setAttribute('data-index',m);
//绑定title每个选项的click事件
    addHandler(items[m],'click',function(){
    for (var i = 0; i < size; i++) {//遍历让所有选项卡图片隐藏,类名为空,
    photoes[i].style.display='none';
    items[i].className='';
    }
    //使被点击的选项处于激活状态,并跳转图片
    index=this.getAttribute('data-index');
    photoes[index].style.display='block';
    items[index].className='active';
   })
}
 
addHandler(window,'load',slideImg);
}


正在回答

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

2回答

同学你好, 对于的问题解答如下

  1. 自动轮播中的判断条件应该改成index 大于等于图片的长度

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

  2. 如下图所示,图片重复显示了

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

    建议: 可以适当调整盒子的高度,让图片刚好铺满盒子显示

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

    同时需要调整最外层盒子的高度

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

  3. 给大盒子绑定鼠标移入移出事件写法有误,建议修改: 只传入函数名就可以了

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

  4. 橙色背景选项卡字体没有加粗显示, 建议:可以给active添加font-weight属性

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

如果帮助到了你, 欢迎采纳!

祝学习愉快~~~~

好帮手慕慕子 2019-11-07 18:49:32

同学你好, 因为你没有调用slideImg函数, 所以无法自动轮播哦

建议:

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

同学完成作业后可以提交作业, 批作业的老师会针对你的代码给出详细的修改建议哦

如果帮助到了你, 欢迎采纳,祝学习愉快~~~


  • 提问者 Cora_123 #1
    我修改之后,可以轮播,但是轮播完一次就有报错,重新轮播完一次,就叠加一次如同的错误,我不太理解报错的地方是什么问题,可以帮我解决嘛?
    2019-11-07 19:02:47
问题已解决,确定采纳
还有疑问,暂不采纳

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

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

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

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

帮助反馈 APP下载

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

公众号

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

在线咨询

领取优惠

免费试听

领取大纲

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