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

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

<!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>
//全局变量
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();
*{
	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回答

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

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下载
官方微信

在线咨询

领取优惠

免费试听

领取大纲

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