图片轮播相信很多人都会直接去下载一个插件,改改就行了。但是,今天要给大家讲一下具体的原理。
具体的图如下面:

实现图片轮播,最重要的是控制好JQuery的代码,主要有以下几个要点需要注意:
1. 图片在没有鼠标事件的情况下,要实现图片轮播,就需要setInterval()定时函数进行轮播
2. 在图片轮播的时候,最下面的文字要变化,角标也需要变化
3. 点击左右箭头切换上一张或者下一张图片,要注意让自动轮播停止,给左右箭头绑定上一张或者下一张的事件
4.鼠标移动到任意一个角标,相应的图片要变,文字也要变
要了解的技术:
1.setInterval()函数的用法
2.JQuery的find()函数
3.JQuery的romveClass()函数
4.JQuery的addClass()函数
5.JQuery的eq()函数
6.JQuery的each()函数
代码展示:
html代码:
<body> <div id="wrapper"> <div id="banner">
<!-- 轮播图片 -->
<ul class="imgList"> <li><img src="img/img1.jpg" width="400px" height="300px" alt="puss image1" /></li> <li><img src="img/img2.jpg" width="400px" height="300px" alt="puss image2" /></li> <li><img src="img/img3.jpg" width="400px" height="300px" alt="puss image3" /></li> <li><img src="img/img4.jpg" width="400px" height="300px" alt="puss image4" /></li> <li><img src="img/img5.jpeg" width="400px" height="300px" alt="puss image5" /></li> </ul> <!-- 左右箭头的图片 --> <img src="img/left.png" width="25px" height="60px" id="prev" /> <img src="img/right.png" width="25px" height="60px" id="next" /> <div id="bg"></div> <!-- 轮播文字 --> <ul class="infoList"> <li class="infoOn">puss image1</li> <li>puss image2</li> <li>puss image3</li> <li>puss image4</li> <li>puss image5</li> </ul> <!-- 轮播角标 --> <ul class="indexList"> <li class="indexOn">1</li> <li>2</li> <li>3</li> <li>4</li> <li>5</li> </ul> </div> </div> </body>
CSS样式:
body,div,ul,li,img{margin: 0;padding: 0;} ul,li{list-style: none;} #wrapper{position: relative;margin: 30px auto;width: 400px;height: 300px;border: 0px solid red;} #banner{position: relative;width: 400px;height: 300px;border: 0px solid green;overflow: hidden;} .imgList{position: relative;width: 2000px;height: 300px;z-index: 10;overflow: hidden;} .imgList li{float: left;display: inline;} #prev,#next{position: absolute;top: 120px;z-index: 20;cursor: pointer;opacity: 0.2;filter:alpha(opacity=20);} #prev{left: 10px;} #next{right: 10px;} #prev:hover,#next:hover{opacity: 0.6;filter:alpha(opacity=60);} #bg{position: absolute;bottom: 0;width: 400px;height: 40px;z-index: 20;background: black;opacity: 0.4;filter: alpha(opacity=40);} .infoList{position: absolute;left: 10px;bottom: 10px;z-index: 30;} .infoList li{display: none;} .infoList .infoOn{display: inline;color: white;} .indexList{position: absolute;right: 10px;bottom: 10px;background: b;z-index: 30;} .indexList li{display: inline;cursor: pointer;background: gray;margin-left: 5px;padding: 2px 4px;} .indexList .indexOn{background: wheat;font-weight: bold;}
js代码:
<script type="application/javascript" src="js/jquery-1.9.1.js"></script>
<script type="application/javascript">
$(function() {
var count = 0;
var imgLength = $(".imgList li").length;
//alert("length:"+imgLength);
/**
* 1.让图片通过setInterval()定时函数,实现图片自动滑动
* 2.点击左右按钮时,清除自动轮播,绑定左右切换事件
* 3.自动轮播事件,要注意图片动,相应的文字描述、角标也要跟随变化
*/
var autoChange = setInterval(function() {
if(count < imgLength - 1) {
count++;
} else {
count = 0;
}
//调用变化函数
toChange(count);
}, 2500);
/**
* 左箭头事件,鼠标划入,停止轮播;滑出,开始轮播
* 点击左箭头,表示上一页,这时要确定上一张图片的count数为多少
* @param {Object} count
*/
$("#prev").hover(function(){
clearInterval(autoChange);
},function(){
autoChangeAgain();
});
$("#prev").click(function(){
count = (count >0)? (--count) : (imgLength-1);
toChange(count);
});
/**
* 右箭头事件,鼠标划入,停止轮播;滑出,开始轮播
* 点击右箭头,表示下一页,这时要确定下一张图片的count数为多少
* @param {Object} count
*/
$("#next").hover(function(){
clearInterval(autoChange);
},function(){
autoChangeAgain();
});
$("#next").click(function(){
count = (count < imgLength-1)? (++count) : 0;
toChange(count);
});
/**
* 给下面的角标绑定滑入事件
*/
$(".indexList").find("li").each(function(item){
$(this).hover(function(){
clearInterval(autoChange);
toChange(item);
count = item;
},function(){
autoChangeAgain();
});
});
//这个函数要放在里面才可以,因为autoChange、count、ImLength参数都是提前声明好的,需要传承上一个调用函数的数据
function autoChangeAgain(){
autoChange = setInterval(function() {
if(count < imgLength - 1) {
count++;
} else {
count = 0;
}
//调用变化函数
toChange(count);
}, 2500);
}
});
function toChange(count) {
/**
* 逻辑处理:
* 1.图片切换
* 2.文字切换
* 3.角标切换
*/
var moveLen = count * 400;
$(".imgList").animate({
left: "-" + moveLen + "px"
}, 500);
$(".infoList").find("li").removeClass("infoOn").eq(count).addClass("infoOn");
$(".indexList").find("li").removeClass("indexOn").eq(count).addClass("indexOn");
}
</script>
以上是具体的实现过程