jquery動畫 -- 6.制作帶鼠標和鍵盤引導功能的圖片瀏覽器


  今天我們要介紹的jquery動畫效果是,當移動鼠標或者按鍵盤的左右鍵時,圖片走廊中的圖片向相應方向轉動。

  先來看張效果圖,教程最后附有demo,大家可以下載。

  首先要做的工作是創建html文本。

<div id="proximity">
        <img src="img/proximity1.jpg" alt="CH-47 Chinook" />
        <img src="img/proximity2.jpg" alt="Mi-24W" />
        <img src="img/proximity3.jpg" alt="Mil Mi-24A" />
        <img src="img/proximity4.jpg" alt="AH-1J Cobra" />
        <img src="img/proximity5.jpg" alt="Mi-24P" />
        <img src="img/proximity6.jpg" alt="AH-1Z Viper" />
        <img src="img/proximity7.jpg" alt="AH-1W Cobra" />
        <img src="img/proximity8.jpg" alt="UH-1Y Huey" />
        <img src="img/proximity9.jpg" alt="AH-64 Apache" />
        <img src="img/proximity10.jpg" alt="AH-1W Super Cobra" />
        <img src="img/proximity11.jpg" alt="MI-28 Havoc" />
        <img src="img/proximity12.jpg" alt="AH-1W Super Cobra" />
    </div>

  內容很簡單就是一個div,里面包含12張圖片。接下來是添加css。

<style type="text/css">
    /* base classes (scripting disabled) */
    #proximity
    {
        width: 960px;
        margin: auto;
        border: 1px solid #000;
        -moz-border-radius: 8px;
        -webkit-border-radius: 8px;
        border-radius: 8px;
    }
    #proximity img
    {
        border: 1px solid #000;
    }
    /* scripting enabled classes */
    #proximity.slider
    {
        width: 650px;
        height: 250px;
        position: relative;
        overflow: hidden;
    }
    .slider #scroller
    {
        position: absolute;
        left: 0;
        top: 0;
    }
    .slider #scroller img
    {
        display: block;
        width: 150px;
        height: 150px;
        margin: 50px 0 0 50px;
        float: left;
        color: #fff;
        background-color: #000;
    }
    .slider #scroller img:first-child
    {
        margin-left: 0;
    }
    #message
    {
        width: 100%;
        height: 30px;
        padding-top: 10px;
        margin: 0;
        -moz-border-radius: 0 0 8px 8px;
        -webkit-border-bottom-radius: 8px;
        -webkit-border-bottom-right-radius: 8px;
        border-radius: 0 0 8px 8px;
        position: absolute;
        bottom: 0;
        left: 0;
        background-color: #000;
        color: #fff;
        text-align: center;
        font: 18px "Nimbus Sans L" , "Helvetica Neue" , "Franklin Gothic Medium" , Sans-serif;
    }
</style>

  css也很簡單,border-radius是css3新增加的屬性,可以為邊框實現圓角效果,大家可以去網上查相關的api。

  html有了,css有了,現在就差js代碼了。首先我們是定義一些我們需要使用到的js對象。

//獲取總的容器對象
var prox = $('#proximity'),
//為圖片創建一個新的容器對象
scroller = $('<div></div>', {
    id: 'scroller'
}),
//鼠標提示信息
pointerText = 'Use your pointer to scroll, moving to the edge scrolls faster!',
//鍵盤提示信息
keyboardMessage = "Use your arrow keys to scroll the images!",
//提示信息容器,默認顯示鍵盤提示信息
message = $("<p></p>", {
    id: "message",
    text: keyboardMessage
});

//將新創建的圖片容器對象scroller添加到prox里面,讓他包含圖片
//同時將提示文本信息添加到prox里面
prox.addClass('slider').wrapInner(scroller).append(message);

//計算prox的寬度的一半,存入變量middle
var middle = prox.width() / 2;

//獲取新添加的scroller對象
scroller = $('#scroller');
//計算scroller的寬度,計算規則就是所有圖片的寬度加上他的margin-left
scroller.width(function () {
    var total = 0;
    scroller.children().each(function (i, val) {
        var el = $(this);
        total = total + (el.outerWidth() + parseInt(el.css('marginLeft')));
    });
    return total;
})
//設置圖片居中
.css('left', '-' + (scroller.width() / 2 - middle) + "px");

  接下來是定義圖片移動函數goAnim()。

//定義圖片移動函數
function goAnim(e) {
    //獲取prox的偏移位置
    var offset = prox.offset(),
    //鼠標x軸坐標 減去 prox左偏移量 減去 prox的寬度的一半
    resetOffset = e.pageX - offset.left - middle,
    normalizedDuration = (resetOffset > 0) ? resetOffset : -resetOffset,
    //設置動畫時間,實現的效果是鼠標越靠近prox的中間,圖片運行越慢
    //鼠標越靠近prox的兩邊,圖片運行越快
    duration = (middle - normalizedDuration) * 50;

    scroller.stop().animate({
        left: (resetOffset < 0) ? 0 : -(scroller.width() - prox.width())
    }, duration, 'linear');
}

  goAnim()通過計算鼠標的位置判斷圖片是應該向左還是向右滑動,並計算出圖片的滑動速度。為了讓大家更好的理解resetOffset,e.pageX ,offset.left ,middle這幾個對象,我畫了下面的簡圖,希望對大家有幫助。

  接下來要做的就是要設置鼠標移動和按鍵盤相關的事件方法了。

//設置鼠標進入事件
prox.mouseenter(function (e) {
    //漸隱提示文字
    message.text(pointerText)
            .delay(1000)
            .fadeOut('slow');
    //運行移動方法
    goAnim(e);

    //設置鼠標移動事件
    prox.mousemove(function (event) {
        //運行移動方法
        goAnim(event);
    });
});

//設置鼠標移出事件
prox.mouseleave(function () {
    //鼠標移出動畫消失
    scroller.stop();
    //移出鼠標移動事件
    prox.unbind('mousemove');
});

//設置鍵盤事件
$(document).keydown(function (e) {
    //判斷是否按下鍵盤左右鍵
    if (e.keyCode === 37 || e.keyCode === 39) {
        //提示文件漸隱
        message.fadeOut('slow');

        //當前沒有動畫
        if (!scroller.is(':animated')) {
            //設置動畫效果,6秒鍾完成圖片移動到最左或最右
            //按下左鍵圖片移動到最左,按下右鍵移動到最右
            //最左是通過left:0實現的,最右是通過left: -(scroller.width() - prox.width()
            scroller.stop().animate({
                left: (e.keyCode === 37) ? 0 : -(scroller.width() - prox.width())
            }, 6000, 'linear');
        }
    }
})
//鍵盤彈起,結束動畫
.keyup(function () {
    scroller.stop();
});

  我注釋寫的比較多,希望對大家理解代碼有幫助。有興趣的朋友可以下載demo觀看實際效果。

  demo下載地址:jquery.animate.proximity.rar


免責聲明!

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



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