关于轮播图无缝滚动

来源:7-1 items区域的布局

hunmix

2018-02-12 20:36:30

	<section class="banner-box" id="banner-box">
		<div class="banner">
			<img src="img/banner1.jpg">
			<img src="img/banner2.jpg">
			<img src="img/banner3.jpg">
			<img src="img/banner4.jpg">
			<img src="img/banner1.jpg">
		</div>
		<div class="dots" id="dots">
			<span class="active"></span>
			<span></span>
			<span></span>
			<span></span>
		</div>
	</section>
/*banner*/
.banner-box{
	position: relative;
	width: 100%;
	overflow: hidden;
	height: 9rem;
}
.banner{
	position: absolute;
	width: 193.8rem;
	overflow: hidden;
	/*transition: transform 1s;*/
}
.banner>img{
	display: block;
	float: left;
	width: 18.75rem;
	height: 9rem;
}
.dots{
	position:absolute;
	display: flex;
	justify-content:center;
	align-items: center;
	bottom: .5rem;
	width: 100%;
	height: 1rem;
	line-height: 1rem;
}
.dots>span{
	display: inline-block;
	margin:0 .1rem;
	width: .5rem;
	height: .5rem;
	background:#9aa499;
	border-radius: 50%;
	cursor: pointer;
}
.dots>span.active{
	background:#fff;
}
(function(doc){
	var bannerBox=getById("banner-box");
	var dotBox=getById("dots");
	var dots=dotBox.getElementsByTagName("span");
	var innerBox=doc.getElementsByClassName("banner")[0];
	//获取banner图片
	var img=bannerBox.getElementsByTagName("img");
	var index=0;
	var timer=null;
	//通过id获取dom元素
	function getById(id){
		return doc.getElementById(id) || id;
	}
	function slider(){
		var len=img[0].width;
		window.onresize=function(){
			len=img[0].width;
		}
		//鼠标移入事件
		bannerBox.onmouseover=function(){
			clearInterval(timer);
		}
		//鼠标移出事件
		bannerBox.onmouseout=function(){
				//设置定时器
				timer=setInterval(function(){
				//当跳到第5张图片时无动画回到第一张
				if(index==5){
					//取消动画效果
					innerBox.style.transition="";
					//还原图片到第一张
					innerBox.style.transform="translateX(0)";
					//设置索引为0
					index=0;
				}
				changeImg(len);
			},1000)
		}
		//循环所有圆点
		for(var i=0;i<dots.length;i++){
			//设置索引
			dots[i].index=i;
			//绑定圆点点击事件
			dots[i].onclick=function(){
				//获取索引
				index=this.index;
				changeImg(len);
			}
		}
	}
	//切换图片函数
	function changeImg(len){
		//圆点跟随
		if(index<4){
			for(var i=0;i<dots.length;i++){
				dots[i].className="";
			}
			dots[index].className="active";
		}else{
			for(var i=0;i<dots.length;i++){
				dots[i].className="";
			}
			dots[0].className="active";
		}
		//图片移动
		innerBox.style.transition="transform 1s";
		innerBox.style.transform="translateX(-"+len*index+"px"+")";
		index++;
	}
	slider();
})(document)

http://img.mukewang.com/climg/5a818a0d0001104a04960233.jpg

如图代码并没有达到效果,到第5张时图片会有动画的返回第1张,但是我用断点一步一步跑又是正常的,不知道哪里有问题

写回答

1回答

海纳百川_

2018-02-13

你写的这种方式是实现不了的,因为返回第一张的时候清除不了过渡。老师讲的方法最经典,最简便,为什么非要写个麻烦的办法,自找麻烦呢,以后开发的时候也不会让写麻烦的方法的,老铁!

0
hunmix
h emmmm 因为想用原生写写看 然饿不知道怎么写动画 就用过渡试了一下
h018-02-13
共1条回复

0 学习 · 5012 问题

查看课程