jquery特效(5)—輪播圖③(鼠標懸浮停止輪播)


今天很無聊,就接着寫輪播圖了,需要說明一下,這次的輪播圖是在上次隨筆中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
        );
        /*鼠標懸浮圖片停止輪播代碼結束*/
})

 

已經把輪播圖寫的差不多了,基本上滿足了我明天項目上的應用,有時間再把輪播圖的其他功能完善一下吧,還是周末好,可以自由自在的寫代.

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM