jQuery实现轮播图的无缝滚动
之前在学习jQuery时,想做一个轮播图的demo,于是在网上了找了相关的视频教程。然后根据教程不断的改变ul元素的左外边距自己做了一个demo,但是在演示的时候,最后一张到第一张图片切换到时候没有动画效果。之后尝试在最后多添加一个第一张图片,然后在展示这张图片时,默默的把其换成了真正的第一张图片,这样在切换的时候看不到痕迹。但是这样在第一张点击向前时,会出现两张一样的第一张图片。那么如何实现无缝滚动呢?
一、原理 实现原理是通过div的overflow:hide属性来显示单个图片,再不断的改变ul元素的左外边距动画显示每个图片,最关键的是这里,在将ul的第一个元素左移后,将其添加到ul的尾部然后删除,这样,当前显示的图片一直是第一张图片。
二、动手看看 html代码:
<div id="container">
<div id="content">
<ul class="photo">
<li class="Li"><img src="images/1.jpg"></li>
<li class="Li"><img src="images/2.jpg"></li>
<li class="Li"><img src="images/3.jpg"></li>
<li class="Li"><img src="images/4.jpg"></li>
<li class="Li"><img src="images/5.jpg"></li>
<li class="Li"><img src="images/6.jpg"></li>
</ul>
</div>
<div id="nav">
<a href="#" class="next"></a>
<a href="#" class="prev"></a>
</div>
</div>
接下来是CSS部分,利用ul外层的div的overflow属性来显示单个图片
#content {
overflow: hidden;
width: 400px;
height: 300px;
margin: 0 auto;
border: 3px solid black;
}
还需要将ul里的图片弄成一行,这个直接利用浮动设置
.photo li {
float: left;
}
这样基本的布局已经完成了,下面要实现的就是jQuery的部分了,将ul的左外边距依次减小图片的宽度400px。但是这样的话,当移动到最后一张图片的时候,再点击下一页,就要把ul的左外边距重新设置成0px,这样就完成了图片的轮播。
但是这样其实有一个BUG,你从最后一张图片跳到第一张图片其实是没有动画效果的,看起来很不舒服,那怎么弄,才能解决这个小BUG呢。
其实jQuery有两个方法,prepend() 和append()。前者是在一个元素中的头部插入一个元素,后者是在尾部,这样每次在将ul的第一个元素左移400px后,将其添加到ul的尾部然后删除利用remove()方法,也就是说这第一个元素现在成了最后一个元素。这中间需要用一个变量保存这个元素,可以利用clone()方法。
代码如下
$(document).ready(function(){
$("#nav .next").click(function(){
movenext();
});
function movenext(){
$(".photo li:first-child").animate({marginLeft:"-400px"},1000,function(){
var temp=$(this).clone();
$(this).remove();
temp.css({marginLeft:"0"});
$(".photo").append(temp);
});
}
});
这样,向后轮播实现。向前是一样的
$(document).ready(function(){
$("#nav .prev").click(function(){
moveprev();
});
function moveprev(){
var temp=$(".photo li:last-child").clone();
$(".photo li:last-child").remove();
temp.css({marginLeft:"-400px"});
$(".photo").prepend(temp);
$(".photo li:first-child").animate({marginLeft:"0"},1000);
}
});
这里需要注意的一点,向前是需要先将尾部的元素添加到头部,再执行图片的切换,和向后的顺序是相反的。
在线轮播图展示:简单的轮播图