今天很無聊,就接着寫輪播圖了,需要說明一下,這次的輪播圖是在上次隨筆中jquery特效(3)—輪播圖①(手動點擊輪播)和jquery特效(4)—輪播圖②(定時自動輪播)的基礎上寫出來的,也就是本次隨筆展示的是手動點擊輪播效果、定時自動輪播效果以及鼠標懸浮在圖片上面停止輪播的程序,建議想連貫學習的小伙伴把我昨天寫的筆記看完后再看這篇文章.
先來看最終的動態效果圖:
上面的主要展示效果就是鼠標懸浮時圖片停止滾動,截圖軟件是綠色版,所以展示的效果速度有點快,但大體的效果已經出現了.
一、主體程序
<!DOCTYPE html> <html> <head> <meta charset="utf-8" /> <title>輪播圖①(手動點擊輪播)</title> <link type="text/css" rel="stylesheet" href="css/layout.css" /> </head> <body> <div class="slideShow"> <!--圖片布局開始--> <ul> <li><a href="#"><img src="img/picture01.jpg" /></a></li> <li><a href="#"><img src="img/picture02.jpg" /></a></li> <li><a href="#"><img src="img/picture03.jpg" /></a></li> <li><a href="#"><img src="img/picture04.jpg" /></a></li> </ul> <!--圖片布局結束--> <!--按鈕布局開始--> <div class="showNav"> <span class="active">1</span> <span>2</span> <span>3</span> <span>4</span> </div> <!--按鈕布局結束--> </div> <script src="js/jquery-1.11.3.js"></script> <script src="js/layout.js"></script> </body> </html>
額,上面的主體程序和前兩次筆記沒有區別,未做任何修改,感興趣的可以看jquery特效(3)—輪播圖①(手動點擊輪播)筆記說明,我本次隨筆重點會在Jquery程序里面
二、CSS樣式
*{ margin: 0; padding: 0; } ul{ list-style: none; } .slideShow{ width: 346px; height: 210px; /*其實就是圖片的高度*/ border: 1px #eeeeee solid; margin: 100px auto; position: relative; overflow: hidden; /*此處需要將溢出框架的圖片部分隱藏*/ } .slideShow ul{ width: 2000px; position: relative; /*此處需注意relative : 對象不可層疊,但將依據left,right,top,bottom等屬性在正常文檔流中偏移位置,如果沒有這個屬性,圖片將不可左右移動*/ } .slideShow ul li{ float: left; /*讓四張圖片左浮動,形成並排的橫着布局,方便點擊按鈕時的左移動*/ width: 346px; } .slideShow .showNav{ /*用絕對定位給數字按鈕進行布局*/ position: absolute; right: 10px; bottom: 5px; text-align:center; font-size: 12px; line-height: 20px; } .slideShow .showNav span{ cursor: pointer; display: block; float: left; width: 20px; height: 20px; background: #ff5a28; margin-left: 2px; color: #fff; } .slideShow .showNav .active{ background: #b63e1a; }
嘿嘿,上面的樣式程序也是和前面兩次的筆記沒有區別,未做任何修改,感興趣的可以看jquery特效(3)—輪播圖①(手動點擊輪播)筆記說明,我本次隨筆重點會在Jquery程序里面
三、jQuery程序
先說一下鼠標懸浮圖片輪播停止的原理:
1、當鼠標懸浮在框架上方時,清除定時器即用clearInterval(timer)關閉定時器,使自動輪播停止
2、當鼠標離開框架上方時,重新啟動定時器
3、鼠標的懸浮和離開借助於hover函數
hover(over,out)一個模仿懸停事件(鼠標移動到一個對象上面及移出這個對象)的方法。這是一個自定義的方法,它為頻繁使用的任務提供了一種“保持在其中”的狀態。
參數:
over (Function) : 鼠標移到元素上要觸發的函數。
out (Function): 鼠標移出元素要觸發的函數。
下面來看jQuery程序:
$(document).ready(function(){
var slideShow=$(".slideShow"), //獲取最外層框架的名稱
ul=slideShow.find("ul"),
showNumber=slideShow.find(".showNav span"),//獲取按鈕
oneWidth=slideShow.find("ul li").eq(0).width(); //獲取每個圖片的寬度
var timer=null; //定時器返回值,主要用於關閉定時器
var iNow=0; //iNow為正在展示的圖片索引值,當用戶打開網頁時首先顯示第一張圖,即索引值為0
/*手動點擊按鈕進行圖片輪播代碼開始*/
showNumber.on("click",function(){ //為每個按鈕綁定一個點擊事件
$(this).addClass("active").siblings().removeClass("active"); //按鈕點擊時為這個按鈕添加高亮狀態,並且將其他按鈕高亮狀態去掉
var index=$(this).index(); //獲取哪個按鈕被點擊,也就是找到被點擊按鈕的索引值
iNow=index;
ul.animate({
"left":-oneWidth*iNow, //注意此處用到left屬性,所以ul的樣式里面需要設置position: relative; 讓ul左移N個圖片大小的寬度,N根據被點擊的按鈕索引值iNow確定
})
});
/*手動點擊按鈕進行圖片輪播代碼結束*/
/*定時自動輪播圖片代碼開始*/
timer=setInterval(function(){ //打開定時器
iNow++; //讓圖片的索引值次序加1,這樣就可以實現順序輪播圖片
if(iNow>showNumber.length-1){ //當到達最后一張圖的時候,讓iNow賦值為第一張圖的索引值,輪播效果跳轉到第一張圖重新開始
iNow=0;
}
showNumber.eq(iNow).trigger("click"); //模擬觸發數字按鈕的click
},2000); //2000為輪播的時間
/*定時自動輪播圖片代碼結束*/
/*鼠標懸浮圖片停止輪播代碼開始*/
slideShow.hover(
function(){
clearInterval(timer);
},function(){
timer=setInterval(function(){ //打開定時器
iNow++; //讓圖片的索引值次序加1,這樣就可以實現順序輪播圖片
if(iNow>showNumber.length-1){ //當到達最后一張圖的時候,讓iNow賦值為第一張圖的索引值,輪播效果跳轉到第一張圖重新開始
iNow=0;
}
showNumber.eq(iNow).trigger("click"); //模擬觸發數字按鈕的click
},2000); //2000為輪播的時間
}
);
/*鼠標懸浮圖片停止輪播代碼結束*/
})
從上圖可以看出開啟定時器的代碼是重復的,所以這里可以定義一個自動播放的函數autoPlay()來精簡代碼,經過精簡后的代碼如下:
/*定時自動輪播圖片代碼開始*/
function autoPlay(){
timer=setInterval(function(){ //打開定時器
iNow++; //讓圖片的索引值次序加1,這樣就可以實現順序輪播圖片
if(iNow>showNumber.length-1){ //當到達最后一張圖的時候,讓iNow賦值為第一張圖的索引值,輪播效果跳轉到第一張圖重新開始
iNow=0;
}
showNumber.eq(iNow).trigger("click"); //模擬觸發數字按鈕的click
},2000); //2000為輪播的時間
}
autoPlay();
/*定時自動輪播圖片代碼結束*/
定義完成后不要忘記調用這個函數,即autoPlay();
那么最終版的jQuery程序如下:
$(document).ready(function(){
var slideShow=$(".slideShow"), //獲取最外層框架的名稱
ul=slideShow.find("ul"),
showNumber=slideShow.find(".showNav span"),//獲取按鈕
oneWidth=slideShow.find("ul li").eq(0).width(); //獲取每個圖片的寬度
var timer=null; //定時器返回值,主要用於關閉定時器
var iNow=0; //iNow為正在展示的圖片索引值,當用戶打開網頁時首先顯示第一張圖,即索引值為0
/*手動點擊按鈕進行圖片輪播代碼開始*/
showNumber.on("click",function(){ //為每個按鈕綁定一個點擊事件
$(this).addClass("active").siblings().removeClass("active"); //按鈕點擊時為這個按鈕添加高亮狀態,並且將其他按鈕高亮狀態去掉
var index=$(this).index(); //獲取哪個按鈕被點擊,也就是找到被點擊按鈕的索引值
iNow=index;
ul.animate({
"left":-oneWidth*iNow, //注意此處用到left屬性,所以ul的樣式里面需要設置position: relative; 讓ul左移N個圖片大小的寬度,N根據被點擊的按鈕索引值iNow確定
})
});
/*手動點擊按鈕進行圖片輪播代碼結束*/
/*定時自動輪播圖片代碼開始*/
function autoPlay(){
timer=setInterval(function(){ //打開定時器
iNow++; //讓圖片的索引值次序加1,這樣就可以實現順序輪播圖片
if(iNow>showNumber.length-1){ //當到達最后一張圖的時候,讓iNow賦值為第一張圖的索引值,輪播效果跳轉到第一張圖重新開始
iNow=0;
}
showNumber.eq(iNow).trigger("click"); //模擬觸發數字按鈕的click
},2000); //2000為輪播的時間
}
autoPlay();
/*定時自動輪播圖片代碼結束*/
/*鼠標懸浮圖片停止輪播代碼開始*/
slideShow.hover(
function(){
clearInterval(timer);
},autoPlay
);
/*鼠標懸浮圖片停止輪播代碼結束*/
})
已經把輪播圖寫的差不多了,基本上滿足了我明天項目上的應用,有時間再把輪播圖的其他功能完善一下吧,還是周末好,可以自由自在的寫代.