css图片轮播效果

因为在个人的项目中用到了轮播图,所以记录一下,巩固基础以及方便日后浏览。

轮播图里有四张图片及前、后两个按钮:

 <div class="wrap">
    <div class="carousel">
      <div><img src="images/1.JPG"></div>
      <div><img src="images/2.JPG"></div>
      <div><img src="images/3.JPG"></div>
      <div><img src="images/4.JPG"></div>
    </div>
 </div>

 <div class="button">
      <button class="pre">上一张</button>
      <button class="next">下一张</button>
 </div>

首先将图片向左浮动成一排,在最外层div设置高度和宽度,然后用overflow:hidden只显示第一张图片,隐藏超出宽度设定的其他图片。样式表如下:

.wrap{position:relative; top:-666px; left:480px; width:473px; min-height:269px; margin:0 auto; overflow:hidden;}

.carousel{position:absolute; transition:all 0.5s ease-in 0s;}

.wrap img{width:100%;}

.carousel div{float:left; text-align:center;}

.button{position:relative; top:-658px; left:484px; text-align:center;}

其中最关键的一点就是:

transition:all 0.5s ease-in 0s;

这是CSS3中的过渡属性,当元素从一种样式变换为另一种样式时为元素添加效果。属性中每个值的意义:过渡的属性,过渡的时间,过渡的效果,延迟开始时间。

我把设置图片的宽度和全部图片的总宽度在js中进行,因为图片的个数可能会变。如果在css中设置,当图片个数变化时,要逐个修改css值,而在js中就可以很灵活。js代码如下:

(function (){
	var carousel = document.querySelector(".carousel");

	var img = carousel.querySelectorAll("div");

	var len = img.length;

	[].forEach.call(img, function (item){
		item.style.width = (100/len) + "%"; //均分每张图片宽度
	});

	carousel.style.left = "0%";	

	carousel.style.width = (100*len) + "%"; //设置全部图片宽度

	var pre = document.querySelector(".pre");

	var next = document.querySelector(".next");

	var i = 0;

	next.onclick = function(){
		var left = carousel.style.left;

		if(i < len-1){
			carousel.style.left = (parseInt(left) -100) + "%";	//还没到最后一张时,left减100%
			
			i++;
		}
		else if(i == len-1){
			carousel.style.left = "0%"; //最后一张时,点击按钮跳到第一张

			i = 0;
		}

	};

	pre.onclick = function(){
		var left = carousel.style.left;

		if(i > 0){
			carousel.style.left = (parseInt(left) + 100) + "%"; //不是第一张时left加100%

			i--;
		}else if(i == 0){
			carousel.style.left = -parseInt(carousel.style.width) + 100 + "%"; //第一张时,点击按钮跳到最后一张

			i = len-1;
		}
	};
}());

当点击按钮时,就会改变元素的left值,即出现轮播图效果。同时又因为设置了transition属性,当left值改变时,会慢速出现过渡效果,在0.5s之内完成。

这样,一个简单的轮播图就完成了

转载于:https://my.oschina.net/u/3415601/blog/900234

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值