1. 程式人生 > >JavaScript之圖片操作4

JavaScript之圖片操作4

.com head mouseover 實現圖 utf set java 步長 技術分享

本次要實現的效果是,在一個盒子裏面有一張長圖,只顯示了一部分,為方便用戶瀏覽,當鼠標移入時,圖片開始滾動,將盒子分成上下兩部分,當鼠標移入上部分時,圖片向上滾動,當鼠標移入下部分時,圖片向下滾動。

技術分享圖片

為了實現上面的效果,我們需要在html中進行簡單的布局:

<div id="box">
     <img id="pic" src="images/timg.jpg" alt="">
     <span id="to_top"></span>
     <span id="to_bottom"></span>
</div>

其中div為外層固定大小的大盒子,因為圖片大於盒子,所以需要將盒子設置超出隱藏,圖片上下滾動式通過定位實現的,需要將圖片設置為相對父級定位,通過兩個span來判斷鼠標移入時的位置是在上半部分還是下半部分,所以兩個span均為盒子的一半,分別位於盒子的上半部分和下半部分。

<style>
        *{
            margin: 0;
            padding: 0;
            list-style: none;
        }

        body{
            background-color: #000;
        }
#box{ width: 750px; height: 400px; border: 1px solid red; margin: 100px auto; overflow: hidden; position: relative; } #pic{ position: absolute; left: 0; top: 0; } #to_top, #to_bottom
{ width: 100%; height: 50%; /*background-color: greenyellow;*/ position: absolute; left: 0; cursor: pointer; } #to_top{ top: 0; } #to_bottom{ bottom: 0; } </style>

接下來開始寫相應的事件,首先需要獲取相應的元素標簽

var box = document.getElementById("box");
var pic = document.getElementById("pic");
var to_top = document.getElementById("to_top");
var to_bottom = document.getElementById("to_bottom");

然後監聽鼠標事件,並用定時器實現動畫效果。

to_top.onmouseover = function () {
       timer = setInterval(function () {
            num += 10;
            pic.style.top = num + ‘px‘;
       }, 20);
};
to_bottom.onmouseover = function () {
       timer = setInterval(function () {
            num += 10;
            pic.style.top = num + ‘px‘;
       }, 20);
};
box.onmouseout = function () {
      clearInterval(timer);
}

現在基本可以實現圖片相應鼠標,進行上下滑動了,但還是有問題,首先是定時器累加,其次是圖片無限制的上下滑動,針對這兩個問題,我們需要在每次鼠標進入時清除定時器,另外就是判斷滾動的臨界值:

  • 圖片向下滾動時,頂部距離父級元素的位置不能大於0,即初始的默認值位置
  • 圖片向上滾動時,頂部距離父級元素的位置不能小於圖片長度與盒子高度的差值

根據上面的兩點,重新整理上面的代碼:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
    <style>
        *{
            margin: 0;
            padding: 0;
            list-style: none;
        }

        body{
            background-color: #000;
        }

        #box{
            width: 750px;
            height: 400px;
            border: 1px solid red;
            margin: 100px auto;
            overflow: hidden;
            position: relative;
        }

        #pic{
            position: absolute;
            left: 0;
            top: 0;
        }

        #to_top, #to_bottom{
            width: 100%;
            height: 50%;
            /*background-color: greenyellow;*/
            position: absolute;
            left: 0;
            cursor: pointer;
        }

        #to_top{
            top: 0;
        }

        #to_bottom{
            bottom: 0;
        }
    </style>
</head>
<body>
    <div id="box">
        <img id="pic" src="images/timg.jpg" alt="">
        <span id="to_top"></span>
        <span id="to_bottom"></span>
    </div>

<script>
    window.onload = function () {
        // 1. 獲取標簽
        var box = document.getElementById("box");
        var pic = document.getElementById("pic");
        var to_top = document.getElementById("to_top");
        var to_bottom = document.getElementById("to_bottom");

        var timer = null, num = 0;

        // 2. 監聽鼠標事件
        to_top.onmouseover = function () {
            // 2.1 清除定時器
            clearInterval(timer);

            // 2.2 設置定時器
            timer = setInterval(function () {
                 // 步長
                 num -= 10;

                 // 判斷
                 if(num >= -2466){
                     pic.style.top = num + px;
                 }else {
                     clearInterval(timer);
                 }
            }, 20);
        };
        to_bottom.onmouseover = function () {
            // 2.1 清除定時器
            clearInterval(timer);

            // 2.2 設置定時器
            timer = setInterval(function () {
                // 步長
                num += 10;

                // 判斷
                if(num <= 0){
                    pic.style.top = num + px;
                }else {
                    clearInterval(timer);
                }
            }, 20);
        };
        box.onmouseout = function () {
            // 清除定時器
            clearInterval(timer);
        }
    }
</script>
</body>
</html>

完整代碼下載鏈接:點這裏

JavaScript之圖片操作4