轮播图切换大致分为以下几个步骤
1.点击向左向右的图标,平滑切换到上(下)页
2.进行无限切换,第一页的上一页为最后一页,最后一页的下一页为第一页
3.每隔三秒图片进行一次自动切换
4.圆点随着图片的更新而跟新
5.鼠标进入图片区域时,自动切换停止,移开的时候又自动进行
6.点击圆点进行图片的切换
7.解决因为切换过快产生的bug,即判断图片是否正在移动
具体代码如下:
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>焦点轮播图</title>
<style type="text/css">
/*去除内边距,没有链接下划线*/
* {
margin: 0;
padding: 0;
text-decoration: none;
}
/*让<body>有20px的内边距*/
body {
padding: 20px;
}
/*最外围的div*/
#container {
width: 533px;
height: 776px;
overflow: hidden;
position: relative; /*相对定位*/
margin: 0 auto;
}
/*包含所有图片的<div>*/
#list {
width: 3871px; /*7张图片的宽*/
height: 776px;
position: absolute; /*绝对定位*/
z-index: 1; /*???*/
}
/*所有的图片<img>*/
#list img {
float: left; /*浮在左侧*/
}
/*包含所有圆点按钮的<div>*/
#buttons {
position: absolute;
height: 10px;
width: 100px;
z-index: 2;
bottom: 20px;
left: 250px;
}
/*所有的圆点<span>*/
#buttons span {
cursor: pointer;
float: left;
border: 1px solid #fff;
width: 10px;
height: 10px;
border-radius: 50%;
background: #333;
margin-right: 5px;
}
/*第一个<span>*/
#buttons .on {
background: orangered;
}
/*切换图标<a>*/
.arrow {
cursor: pointer;
display: none;
line-height: 39px;
text-align: center;
font-size: 36px;
font-weight: bold;
width: 40px;
height: 40px;
position: absolute;
z-index: 2;
top: 368px;
background-color: RGBA(0, 0, 0, 0.3);
color: #fff;
}
/*鼠标移到切换图标上时*/
.arrow:hover {
background-color: RGBA(0, 0, 0, 0.7);
}
/*鼠标移到整个div区域时*/
#container:hover .arrow {
display: block; /*显示*/
}
/*上一个切换图标的左外边距*/
#prev {
left: 20px;
}
/*下一个切换图标的右外边距*/
#next {
right: 20px;
}
</style>
<script type="text/javascript" src="../js/jquery-3.1.1/jquery-3.1.1.min.js" ></script>
<script type="text/javascript">
/*轮播图切换大致分为以下几个步骤
1.点击向左向右的图标,平滑切换到上(下)页
2.进行无限切换,第一页的上一页为最后一页,最后一页的下一页为第一页
3.每隔三秒图片进行一次自动切换
4.圆点随着图片的更新而跟新
5.鼠标进入图片区域时,自动切换停止,移开的时候又自动进行
6.点击圆点进行图片的切换
7.解决因为切换过快产生的bug,即判断图片是否正在移动
*
* */
$(function(){
//点击左右切换按钮进行切换,平滑的切换
var $container = $("#container");
var $list = $("#list");
var $prev = $("#prev");
var $next = $("#next");
var $points = $("#buttons>span");//显示的图片个数
var imgCount = $points.length;
var TotleDistance = 533;
var TotleTime = 500;
var itemTime = 50;
var index=0;//当前圆点下标
var moving=false;//图片是否处于移动中
//点击上一页
$prev.click(function(){
Switchover(false);
});
//点击下一页
$next.click(function(){
Switchover(true);
});
//每隔三秒自动滑到下一页
var theID;
function autoChange(){
theID = setInterval(function(){
Switchover(true);
},3000);
}
autoChange();
//当鼠标进入图片区域时,自动停止切换,鼠标离开后又开始自动切换
$container.hover(function(){
clearInterval(theID);
},function(){
autoChange();
});
ClickCircle();
//next取true或者false,true为下一张,false为上一张
var IntervalID;
function Switchover(next){
// alert($list.offset().left);
//解决切换上下页速度过快出现的bug
if(moving){//如果正在移动,则直接返回
return ;
}
moving = true;//进入函数说明动画正在移动
var currentLeft = $list.position().left;
var leftDis;
if(typeof next == "boolean"){
leftDis = next? -533:533;//要移动的距离
}else{
leftDis = -533*(next-index);
}
var itemDistance = leftDis/(TotleTime/itemTime);
var targetLeft = currentLeft+leftDis;
//平缓移动,启动定时器
IntervalID = setInterval(function(){
currentLeft +=itemDistance;//移动到该位置
if(((itemDistance<0)&&(currentLeft<targetLeft)) || ((itemDistance>0)&&(currentLeft>targetLeft))){
currentLeft=targetLeft;
}
if(currentLeft == targetLeft){
clearInterval(IntervalID);
//第一页的上一页为最后一页,最后一页的下一页是第一页
if(currentLeft==0){
currentLeft = -imgCount*533;
}
if(currentLeft==-(imgCount+1)*533){
currentLeft = -533;
}
moving = false;//说明已经移动到指定位置,此时停止移动
}
$list.css("left",currentLeft);
},itemTime);
updateCircle(next);
}//end of switchover
//切换页面时,圆点同步更新
function updateCircle(next){
// alert($points[index]);
$points[index].className=" ";
var targetPoint;
if(typeof next == "boolean"){
if(next){
targetPoint = index +1;
if(targetPoint == imgCount){
targetPoint = 0;
}
}else{
targetPoint = index-1;
if(targetPoint==-1){
targetPoint = imgCount-1;
}
}
}else{
targetPoint=next;
}
index = targetPoint;
$points[index].className="on";
}//end of updateCircle
//点击圆点图标切换对应页
function ClickCircle(){
clearInterval(IntervalID);
for (var i=0;i<imgCount;i++) {
$points[i].index=i;//记录圆点下标
$points[i].onclick = function(){
Switchover(this.index);
}
}
}
});
</script>
</head>
<body>
<div id="container">
<div id="list" style="left: -533px;">
<img src="../img/5.jpg" alt="1"/>
<img src="../img/1.jpg" alt="1"/>
<img src="../img/2.jpg" alt="2"/>
<img src="../img/3.jpg" alt="3"/>
<img src="../img/4.jpg" alt="4"/>
<img src="../img/5.jpg" alt="5"/>
<img src="../img/1.jpg" alt="5"/>
</div>
<div id="buttons">
<span index="1" class="on"></span>
<span index="2"></span>
<span index="3"></span>
<span index="4"></span>
<span index="5"></span>
</div>
<a href="javascript:;" id="prev" class="arrow"><</a>
<a href="javascript:;" id="next" class="arrow">></a>
</div>
</body>
</html>