键盘控制背景边框平滑移动(jquery)

    今天同事让我看了一个动画效果,是由键盘控制背景边框平滑移动,我感觉挺cool,所以我自己也动手制作了一个。目的是为了锻炼自己,看自己是否也能在短时间内实现。

  先上图:

一、html代码

<!DOCTYPE html>
    <html>
    <head>
        <title></title>
        <link rel="stylesheet" href="../reset.css"/>
        <script type="text/javascript" src="../jquery-1.10.2.js"></script>
        <style type="text/css">
            .box {width: 544px; height: 680px;  margin: 20px auto;}
            .tab {position: relative;  }
            .tab ul li {position: relative; float: left; margin: 20px; display: table-cell;}
            .highLight {display: none; position: absolute; width: 154px; height: 197px;background: url("images/chose.png") no-repeat;}
            .tab ul li a img{ width: 138px; height: 181px; vertical-align: middle; display:table-cell;vertical-align:middle;}
        </style>
    </head>
    <body>
        <div class="box">
            <div class="tab">
                <ul>
                    <li><a href="#"><img src="images/img1.jpg"/></a></li>
                    <li><a href="#"><img src="images/img1.jpg"/></a></li>
                    <li><a href="#"><img src="images/img1.jpg"/></a></li>
                    <li><a href="#"><img src="images/img1.jpg"/></a></li>
                    <li><a href="#"><img src="images/img1.jpg"/></a></li>
                    <li><a href="#"><img src="images/img1.jpg"/></a></li>
                    <li><a href="#"><img src="images/img1.jpg"/></a></li>
                    <li><a href="#"><img src="images/img1.jpg"/></a></li>
                </ul>
                <div class="highLight"></div>   <!-- 高亮显示的背景图片 -->
            </div>
        </div>
</body> </html>

二、js代码

$(function(){
                    var liHeight = $(".tab ul li").outerHeight(true);   /* li长度 */
                    var liWidth = $(".tab ul li").outerWidth(true); /* li宽度 */
                    var liCount = $(".tab").find("li").length;  /* li总个数 */

                    var i = 0;  /* 判断li是否为第一次鼠标事件 */
                    var index = 0;
                    $(".tab ul li").mouseover(function(){
                        index = $(this).index();    /* 判断li为第几个数,从0开始 */
                        var offsetLeft = $(this).offset().left - $(".box").offset().left - 8;   /* 为移动图片左边距离,减去8是因为图片原因 */
                        var offsetTop = $(this).offset().top - $(".box").offset().top - 8;  /* 为移动图片上边距离,减去8是因为图片原因 */
                        if(i==0){
                            $(".highLight").css({left: offsetLeft,top: offsetTop}).show();
                        }else if(i>0){
                            $(".highLight").animate({left: offsetLeft,top: offsetTop},300);
                        }
                        i++;
                    })

                    var rowCount = 3;   /* 每行显示图片的个数 */
                    var j = 0;
                    $(window).keydown(function(event){
                        var val = event.which;
                        switch(val){
                            case(37):/* 键盘左键 */
                                if(index>0){
                                    index = index-1;
                                }
                                var offsetLeft = $(".tab ul li").eq(index).offset().left - $(".box").offset().left - 8;
                                var offsetTop = $(".tab ul li").eq(index).offset().top - $(".box").offset().top - 8;
                                if(index>=0){
                                    $(".highLight").animate({left: offsetLeft,top: offsetTop},300);
                                }
                            break;

                            case(38):/* 键盘上键 */
                                if((index-rowCount)>=0){
                                    index = index - rowCount;
                                    var offsetLeft = $(".tab ul li").eq(index).offset().left - $(".box").offset().left - 8;
                                    var offsetTop = $(".tab ul li").eq(index).offset().top - $(".box").offset().top - 8;
                                    $(".highLight").animate({left: offsetLeft,top: offsetTop},300);
                                }
                            break;

                            case(39):/* 键盘右键 */
                                if(j==0){
                                    $(".highLight").css({left: "12px",top: "12px"}).show();
                                }else if(j>0){
                                    if(index<(liCount-1)){
                                        index = index+1;
                                    }
                                    var offsetLeft = $(".tab ul li").eq(index).offset().left - $(".box").offset().left - 8;
                                    var offsetTop = $(".tab ul li").eq(index).offset().top - $(".box").offset().top - 8;
                                    if(index<liCount){
                                        $(".highLight").animate({left: offsetLeft,top: offsetTop},300);
                                    }
                                }
                                j++;
                            break;

                            case(40):/* 键盘下键 */
                                if((index+rowCount)<liCount){
                                    index = index + rowCount;
                                    var offsetLeft = $(".tab ul li").eq(index).offset().left - $(".box").offset().left - 8;
                                    var offsetTop = $(".tab ul li").eq(index).offset().top - $(".box").offset().top - 8;
                                    $(".highLight").animate({left: offsetLeft,top: offsetTop},300);
                                }
                        }

                    })

                })

    虽然我现在写的都是一些很简单的代码,但是我还是想通过这种方式来提升自己。里面的文字叙述太少,我会慢慢加强的,争取下次能再好一点。

原文地址:https://www.cnblogs.com/tattoo/p/3459707.html