能实现添加display属性,但是无法实现轮播

能实现添加display属性,但是无法实现轮播

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
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>lunbo</title>
<link rel="stylesheet" type="text/css" href="css/style.css">
</head>
<body>
<!--外容器-->
<div class="main" id="main">
<!--导航菜单-->
<!-- <div class="menu-box"></div> -->
<!--轮播图-->
<div class="banner" id="banner">
<!--因为每个图片都是可以点的连接,所以要有a标签,如果不是死图可以a下加img,如果
是死图就加div,然后再在div的css里面引用图片
-->
<a href="">
<!-- 因为植入图片不一样,所以分别设置slide -->
<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>
</div>
<!-- 轮播图上的左右按钮 -->
<a href="javascript:void(0)" class="button prev"></a>
<a href="javascript:void(0)" class="button next"></a>
<!-- 圆点导航 -->
<div class="dots">
<!-- 按钮在同一行用span -->
<span class="active"></span>
<span></span>
<span></span>
</div>
</div>
<script type="text/javascript" src="js/script.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
//全局变量
var index = 0,
    timer = null
    pics = document.getElementById("banner").getElementsByTagName("div");
    len = pics.length;
function slideImg(){
 
    var main =document.getElementById("main");
    //滑过清除定时器,离开继续
    main.onmouseover=function(){
        //滑过清除定时器
 
    }
    main.onmouseout = function(){    
        timer = setInterval(function(){  
            index++;
            if(index >=len){
                index=0;
            }
            // 切换图片
            changeImg();
        },2000);
    }
}
//切换图片
function changeImg(){
    // 通过索引,选取到要改变的标签的索引,然后添加激活类
    pics[index].style.display ="block";
}
 
slideImg();
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
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
*{
    margin: 0;
    padding: 0;
}
ul{
    list-style: none;
}
body{
    font-family: "微软雅黑";
}
.main{
    width: 1200px;
    height: 460px;
    /*居中*/
    margin:30px auto;
    /*超出范围的就隐藏,关键*/
    overflow: hidden;
    position: relative;
}
.banner{
    width: 1200px;
    height: 460px;
    /*超出范围的就隐藏,关键*/
    /*overflow: hidden;*/
}
.banner-slide{
    /*都是占满所以大小一样*/
    width: 1200px;
    height: 460px;
    /*都是平铺*/
    background-repeat: no-repeat;
    display: none;
}
.slide1{
    /*这里的路径是相对.css这个文件*/
    background-image: url("../img/bg1.jpg");
}
.slide2{
    /*这里的路径是相对.css这个文件*/
    background-image: url("../img/bg2.jpg");
}
.slide3{
    /*这里的路径是相对.css这个文件*/
    background-image: url("../img/bg3.jpg");
}
.slide-active{
    display: block;
}
.button{
    /*注意相对父盒子定位,他的父元素是main不是banner,
    如果不设置父元素relative就变成相对body定位,这样移动后没那么灵活*/
    position: absolute;
    width: 40px;
    height: 80px;
    left: 244px;
    top: 50%;
    margin-top: -40px;
    /*平铺,水平,水平居中*/
    background: url(../img/arrow.png) no-repeat center center;
}
/*有链接按钮的都用a,因为a还可以设置hover*/
.button:hover{
    background-color: #333;
    opacity: 0.8;
    /*ie的透明度*/
    filter: alpha(opacity=80);
}
.prev{
    transform: rotate(180deg);
}
.next{
    /*因为之前设置了left,所以先让left自由*/
    left: auto;
    right: 0;
 
}
 
.dots{
    position: absolute;
    right: 20px;
    bottom: 24px;
    /*靠右对齐*/
    text-align: right;
}
.dots span{
    /*span把一行划分为几个部分,但是想让他显示宽高,就要让他block*/
    display: inline-block;
    width: 12px;
    height: 12px;
    border-radius: 50%;
    /*rgba可以设置透明度,所以一般用这个设置颜色,这样就能根据背景颜色变化颜色*/
    background: rgba(7,17,27,0.4);
    margin-right: 8px;
    line-height: 12px;
    /*添加阴影 :水平 垂直 阴影距离 模糊程度 颜色 内置/外置*/
    box-shadow:  0 0 0 2px rgba(255,255,255,0.8) inset;
    cursor: pointer;
}
.dots .active{
    background: #fff;
    box-shadow:  0 0 0 2px rgba(7,17,27,0.4) inset;
}


正在回答

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

3回答

你好,根据代码,进行调整和建议,与自己代码对比,同时看新添加的注释内容:

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
var index = 0,
        timer = null,
        pics = document.getElementById("banner").getElementsByTagName("div"),
        len = pics.length;
    function slideImg() {
        var main = document.getElementById("main");
        //滑过清除定时器,离开继续
        main.onmouseover = function() {
            //滑过清除定时器
            clearInterval(timer); //添加该语句,如没有该语句,每次触发一个定时器,所以会乱。
        }
        main.onmouseout = function() {
            timer = setInterval(function() {
                index++;
                if (index >= len) {
                    index = 0;
                }
                // 切换图片
                changeImg();
            }, 2000);
        }
        main.onmouseout();  // 添加该语句,让其进来时执行定时轮播图片。
    }
    //切换图片
    function changeImg() {
        // 通过索引,选取到要改变的标签的索引,然后添加激活类
        for (var i = 0; i < len; i++) {
            pics[i].style.display = "none"// 添加先将所有的都不显示,然后在指定显示的,没有这个,由于html 显示,覆盖相应的内容。
        }
        pics[index].style.display = "block";
    }
    slideImg();

希望对你有帮助,祝学习愉快,欢迎采纳。

  • 莨菽菽 提问者 #1
    非常感谢!
    2017-06-16 12:38:34
董建州 2017-06-16 11:14:37

在css里面设置之后只是一开始有效,接下来会被Javascript动态的改变,只要执行change函数就被改变了,你可以在开发者工具中element下看

董建州 2017-06-16 02:57:34

change函数里面在一开始时加一个for循环遍历,让pics里的项全部display:none;

  • 提问者 莨菽菽 #1
    你说的方法可以实现,但是有瑕疵,如果多次滑过,图片轮播速度会无限加快,这样就违背设定变化时间了,而且我在css里面有设置display:none,但是在使用中没有生效,这个比较困惑
    2017-06-16 08:46:03
问题已解决,确定采纳
还有疑问,暂不采纳

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

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

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

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

帮助反馈 APP下载

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

公众号

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

在线咨询

领取优惠

免费试听

领取大纲

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