將圖片設爲向左浮動,再經過jQuery中animate函數,左右滑動顯示圖片,使用setInterval()定時函數控制循環,間隔時長javascript
https://jsfiddle.net/donqi/df3dzsme/css
html結構:html
<div class="showbox"> <div class="imagebox"> //放置圖片 <img src="image/1.jpg" alt="1.jpg"> <img src="image/2.jpg" alt="2.jpg"> <img src="image/3.jpg" alt="3.jpg"> <img src="image/4.jpg" alt="4.jpg"> </div> <div class="icobox"> //放置圖標 <pan rel="0" class="active">0</span> <span rel="1">1</span> <span rel="2">2</span> <span rel="3">3</span> </div> </div>
css:java
.showbox{ position: relative; height: 300px; width: 570px; overflow: hidden; border: 10px solid #eee; background-color: #eee; border-radius: 10px; -webkit-border-radius:10px; -moz-border-radius:10px; } .imagebox{ position: relative; height: 270px; width: 570px; top: 0; left: 5px; overflow: hidden; } .imagebox img{ display: block; width: 570px; height: 270px; float: left; } .icobox{ position: absolute; border: none; width: 120px; height: 12px; left: 220px; bottom: 10px; text-align: center; line-height: 40px; overflow: hidden; } .icobox span{ background: url("../image/ico.png") 0px 0px no-repeat; width: 12px; height: 12px; cursor: pointer; float: left; margin-left: 3px; } .icobox span.active{ background: url("../image/ico.png") 0px -12px no-repeat; cursor: default; }
javascript:web
$(document).ready(function() { var imagebox=$(".showbox").children('.imagebox')[0],//得到圖片容器 icobox=$(".showbox").children('.icobox')[0],//得到圖標容器 ico=$(icobox).children('span'),//得到圖標數組 imagenum=$(imagebox).children().size(),//得到圖片數量 imageboxWidth=$(imagebox).width(),//得到圖片容器的寬度 imagewidth=imageboxWidth*imagenum,//得到圖片的總寬度 activeID = parseInt($($(icobox).children(".active")[0] ).attr("rel")),//得到激活的圖標ID nextID=0,//下一個圖標的ID intervalID,//setInterval()函數的ID delaytime=4000,//延遲的時間 speed=700;//執行速度 $(imagebox).css({'width' : imagewidth + "px"}); var rotate=function(clickID) { //圖片滑動函數 if (clickID+1){ nextID=clickID; }else{ nextID=(activeID+1)%4; }; $(ico[activeID]).removeClass('active'); $(ico[nextID]).addClass('active'); $(imagebox).animate({left:"-"+nextID*imageboxWidth+"px"}, speed);//jQuery中的animate函數 activeID=nextID; } intervalID=setInterval(rotate,delaytime);//循環函數 $.each(ico, function(index, val) { $(this).click(function(event) { clearInterval(intervalID);//清楚以前的定時任務 var clickID = index; rotate(clickID);//運行一次帶參數的rotate函數 intervalID = setInterval(rotate,delaytime); }); }); });
從最後一張圖片到第一張圖片時,要經歷中間全部的圖片,若能實現單向循環,最後一張圖片右滑到第一張圖片。數組
將第一張圖片用animate將其寬度變爲0,放到最後img列表的最後一位,這樣能保證是一個方向,不過圖片寬度是縮減爲0,看起來效果也不是很好app
代碼改動以下:函數
setInterval(function(){ $('.imagebox').append($('.imagebox img').first()); $('.imagebox img').last().css({'width' : "570px"}); $('.imagebox img').first().animate({'width':'0px'},1000); },3000)
簡單demo以下:
https://jsfiddle.net/donqi/20yxy062/1/embedded/動畫
用上面這種辦法橫向滾動效果不太好,可是縱向效果挺好,下面是縱向滾動的demo:
https://jsfiddle.net/donqi/87qqjm4z/this