使用Jquery实现轮播图
虽然轮播图已经有很多第三方库,但是手动实现一个还是能够对javascript有一个更深的理解。
今天就讲一讲如何使用Jquery实现轮播图
首先html结构如下:
<div class="scroll">
// 结合下面的css样式可以知道: 下面是五张轮播图片一开始重叠在
// 父级元素的左上角,轮播图在JS中是通过opacity透明度来控制是否显示的
<ul id="scroll">
<li><a href="plus5.html"><img src="img/scroll_01.jpg" alt=""></a></li>
<li><a href="plus5.html"><img src="img/scroll_02.jpg" alt=""></a></li>
<li><a href="plus5.html"><img src="img/scroll_03.jpg" alt=""></a></li>
<li><a href="plus5.html"><img src="img/scroll_04.jpg" alt=""></a></li>
<li><a href="plus5.html"><img src="img/scroll_05.jpg" alt=""></a></li>
<li><a href="plus5.html"><img src="img/scroll_06.jpg" alt=""></a></li>
</ul>
<div class="scroll_dot">
<!-- 以下是六个圆点的占位 -->
<span class="scroll_dot_span"></span>
<span></span>
<span></span>
<span></span>
<span></span>
<span></span>
</div>
<div class="scroll_arrows">
<a href="javascript:void(0);"><span class="left scroll_arrows_back">〈</span></a>
<a href="javascript:void(0);"><span class="right scroll_arrows_back">〉</span> </a>
</div>
</div>
CSS样式如下:
.scroll #scroll img {
width: 1226px;
position: absolute;
top: 0;
left: 0;
}
.scroll_dot {
width: 120px;
height: 10px;
position: absolute;
bottom: 20px;
right: 20px;
z-index: 20;
}
.scroll_dot span {
width: 6px;
height: 6px;
border: 2px solid #e0e0e0;
background: #cdcac2;
border-radius: 50%;
margin: 0 5px;
display: block;
float: left;
}
.scroll_dot .scroll_dot_span {
background: white;
}
.scroll_arrows span {
width: 41px;
height: 70px;
text-align: center;
line-height: 69px;
color: #5f5750;
position: absolute;
top: 50%;
font-size: 40px;
z-index: 20;
margin-top: -35px;
}
.scroll_arrows .scroll_arrows_back {
background: #5f5750;
color: white;
}
.scroll_arrows .left {
left: 260px;
}
.scroll_arrows .right {
right: 0;
}
下面重点看一下JS部分是如何实现的
var n = 0; //记录轮播图当前索引
var t = setInterval(fun, 5000); // 设置一个定时器用于播放轮播图
// 重点: 轮播图的播放函数,
function fun() {
n++;
// 此时判断轮播图索引是否越界,如果越界则将n重置为0
if (n > $(".scroll>ul>li").length - 1) {
n = 0;
}
// 这里可以看到是通过opacity来控制轮播图是否显示的
// eq(n)表示从当前li集合中指定索引为n的元素
$(".scroll>ul>li").css("opacity", "0").eq(n).css("opacity", "1")
// 控制轮播图下面的圆点样式,实现圆点跟随轮播图移动(移动的圆点是白色背景,默认是灰色背景,白色更显眼) , siblings表示该元素所在集合中的其他兄弟元素 $(".scroll_dotspan").eq(n).addClass("scroll_dot_span").siblings().removeClass("scroll_dot_span");
}
// 点击左箭头让轮播图回调到上一张图片
$(".scroll_arrows .left").click(function () {
n -= 2; // 这里减二,是因为fun函数中: n会自增+1,而后面会调用fun函数。
if (n < -1) { // 这里是判断越界:如果当前已经是第一张图片,那么再回退就轮转到最后一张图片,也就是索引是5,但是fun函数会自增加1,所以n取值4。
左越界的标准是小于-1是因为如果是-1,那么到了fun函数自增+1就变成了0,那么就是第一张图片了,相当于原地不动。
n = 4;
}
fun()
});
// 点击右箭头让图片快进一张
$(".scroll_arrows .right").click(function () {
fun()
});
// 点击轮播图圆点时,将图片切换到该圆点索引对应的图片
$(".scroll_dot span").click(function () {
// 获取点击圆点的索引
n = $(this).index() - 1; // index()函数是jquey中获取该元素在所属集合中的索引。
// 将除了被点击圆点之外的圆点都设置为默认灰色背景,当前被点击圆点的背景设为白色
$(this).siblings().removeClass("scroll_dot_span").end().addClass("scroll_dot_span");
fun() // 播放圆点对应的图片
});
// 这里hover函数接收两个参数:移入时执行的函数和移出时的函数,中间用逗号做分隔符
// 这是jquery hover方法特有用法
$(".scroll").hover(function () {
clearInterval(t); // 鼠标移入时清除定时器
}, function () {
// 鼠标移出时,又设置了一个定时器
t = setInterval(fun, 5000);
});
从以上代码可以看到:代码的核心是js定时器, 全局图片索引的确定,jquery对dom元素的样式控制,轮播图中对索引越界的判断。