三位置法圖片輪播圖
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Document</title>
<style type="text/css">
* {
padding: 0;
margin: 0;
}
ul, ol {
list-style: none;
}
a {
text-decoration: none;
}
.carousel {
width: 560px;
height: 300px;
border: 1px solid #000;
margin: 50px auto;
/*overflow: hidden;*/
position: relative;
}
/*三位置法 舞臺left=0 候場left=560 退場left = -560*/
.carousel .imgs li {
position: absolute;
/*預設所有圖片都在候場位置*/
left: 560px;
top: 0px;
width: 560px;
height: 300px;
}
/*預設第一張圖出現*/
.carousel .imgs li:first-child {
left: 0px;
}
.carousel .btns a {
position: absolute;
width: 30px;
height: 60px;
top: 50%;
margin-top: -30px;
background-color: rgba(0,0,0,.5);
color: #fff;
font-size: 30px;
text-align: center;
line-height: 60px;
}
.carousel .btns a.leftBtn {
left: 10px;
}
.carousel .btns a.rightBtn {
right: 10px;
}
.carousel .circles {
position: absolute;
width: 140px;
height: 20px;
left: 50%;
margin-left: -70px;
bottom: 10px;
overflow: hidden;
}
.carousel .circles ol {
width: 200px;
}
.carousel .circles ol li {
float: left;
width: 20px;
height: 20px;
margin-right: 10px;
border-radius: 50%;
background-color: #eee;
}
.carousel .circles ol li.cur {
background-color: yellow;
}
</style>
</head>
<body>
<div class="carousel">
<ul class="imgs" id="imgs">
<li><img src="images/0.jpg" alt=""></li>
<li><img src="images/1.jpg" alt=""></li>
<li><img src="images/2.jpg" alt=""></li>
<li><img src="images/3.jpg" alt=""></li>
<li><img src="images/4.jpg" alt=""></li>
</ul>
<div class="btns">
<a href="javascript:void(0);" class="leftBtn" id="leftBtn"><</a>
<a href="javascript:void(0);" class="rightBtn" id="rightBtn">></a>
</div>
<div class="circles" id="circles">
<ol>
<li class="cur"></li>
<li></li>
<li></li>
<li></li>
<li></li>
</ol>
</div>
</div>
<script type="text/javascript" src="js/jquery-1.12.3.min.js"></script>
<script type="text/javascript">
// 獲取元素
var $leftBtn = $("#leftBtn");
var $rightBtn = $("#rightBtn");
var $circles = $("#circles ol li");
var $imgs = $("#imgs li");
// 數量
var amount = $circles.length;
// 訊號量
var idx = 0;
// 定時器 相當於自動執行滑鼠右鍵事件 將滑鼠右擊事件寫成函式
var timer = setInterval(rightBtnFun,1000);
// 滑鼠進入圖片定時器停止
$circles.mouseenter(function(){
clearInterval(timer);
})
// 滑鼠離開定時器繼續
$circles.mouseleave(function(){
// 設表先關
clearInterval(timer);
// 重新開始定時器
timer = setInterval(rightBtnFun,1000);
})
// 右鍵點選事件
$rightBtn.click(rightBtnFun);
function rightBtnFun(){
// 防流氓
if($imgs.is(":animated")){
return;
}
// 老圖消失
$imgs.eq(idx).animate({"left":-560},500)
// 新圖入場
// 訊號量改變
idx ++ ;
// 驗證訊號量
if(idx>amount-1){
idx=0;
}
// 新圖入場前瞬移到候場位置
$imgs.eq(idx).css("left",560);
// 新圖入場
$imgs.eq(idx).animate({"left":0},500);
// 小圓點改變
$circles.eq(idx).addClass("cur").siblings().removeClass("cur");
}
// 左鍵點選事件
$leftBtn.click(function(){
// 防流氓
if(!$imgs.is(":animated")){
// 老圖退場 退場位置去了右面
$imgs.eq(idx).animate({"left":560},500)
// 訊號量改變
idx --;
// 訊號量判斷
if(idx<0){
idx=amount-1;
}
// 新圖進場前瞬移 新圖進場
$imgs.eq(idx).css("left",-560).animate({"left":0},500)
// 對應小雨點改變樣式
$circles.eq(idx).addClass("cur").siblings().removeClass("cur");
}
})
// 小圓點滑鼠進入事件
$circles.mouseenter(function(){
// 判斷事件小圓點在哪邊
var i = $(this).index();
// 如果事件小圓點大於當前圖片位置 圖片從右側進入 相當於滑鼠右擊事件
if(i>idx){
// 老圖退場
$imgs.eq(idx).animate({"left":-560},500)
// 新圖進場前瞬移
idx = i;
$imgs.eq(idx).css("left",560)
// 新圖進場
$imgs.eq(idx).stop(true,true).animate({"left":0},500)
$circles.eq(idx).addClass("cur").siblings().removeClass("cur");
}
// 如果事件小圓點小於當前圖片位置 圖片從右側進入 相當於滑鼠右擊事件
if(i<idx){
// 老圖退場
$imgs.eq(idx).animate({"left":560},500)
// 新圖進場前瞬移
idx = i;
$imgs.eq(idx).css("left",-560)
// 新圖進場 防流氓
$imgs.eq(idx).stop(true,true).animate({"left":0},500)
$circles.eq(idx).addClass("cur").siblings().removeClass("cur");
}
})
</script>
</body>
</html>