圖片的局部放大算法

如下圖所示:
在這裏插入圖片描述
下面是完整代碼,算法的每一步已加註釋

<!DOCTYPE html>
<html>
<head lang="en">
    <meta charset="UTF-8">
    <title>局部放大</title>
    <style>
        * {
            margin: 0;
            padding: 0;
        }

        section {
            float: left;
        }

        #small {
            position: relative;
        }

        span {
            width: 150px;
            height: 150px;
            background-color: rgba(255, 255, 255, .3);
            position: absolute;
            display: none;
            cursor: move;
        }

        div {
            float: left;
            margin-left: 1px;
        }

        #big {
            width: 300px;
            height: 300px;
            border: 1px solid pink;
            overflow: hidden;
            display: none;
        }

        #box {
            margin-top: 100px;
            margin-left: 100px;
        }
    </style>
</head>
<body>
<div id="box">
    <div id="small">
        <img src="../untitled/7.jpg" alt="" id="im0"/>
        <span id="sp"></span>
    </div>
    <div id="big">
        <img src="../untitled/7.jpg" alt="" width="900" id="im"/>
    </div>
</div>
<script src="common.js"></script>
<script>
    //獲取需要的元素
    var box = my$("box");
    //獲取小圖的div
    var small = box.children[0];
    //獲取遮擋層
    var mask = small.children[1];
    //獲取大圖
    var big = box.children[1];
    //鼠標進入顯示遮擋層和大圖div
    box.onmouseover = function () {
        mask.style.display = "block";
        big.style.display = "block";
    };
    //鼠標離開隱藏遮擋層和大圖的div
    box.onmouseout = function () {
        mask.style.display = "none";
        big.style.display = "none";
    };
    small.onmousemove = function (e) {
        //鼠標此時的可視區域的橫座標和縱座標
        var x = e.clientX + mask.offsetWidth / 2;
        var y = e.clientY + mask.offsetTop / 2;
        //爲遮擋層的left和top賦值
        x = x - 250;
        y = y - 200;
        //遮擋層橫座標最小值
        x = x < 0 ? 0 : x;
        //遮擋層縱座標最小值
        y = y < 0 ? 0 : y;
        //遮擋層橫座標的最大值
        x = x > small.offsetWidth - mask.offsetWidth ? small.offsetWidth - mask.offsetWidth : x;
        //遮擋層縱座標的最大值
        y = y > small.offsetHeight - mask.offsetHeight ? small.offsetHeight - mask.offsetHeight : y;
        mask.style.left = x + "px";
        mask.style.top = y + "px";
        //遮擋層的移動距離 / 大圖的移動距離 = 遮擋層的最大移動距離 / 大圖的最大移動距離
        //大圖的移動距離 = 遮擋層的移動距離 * 大圖的最大移動距離 / 遮擋層的最大移動距離

        //大圖的橫向的最大移動距離
        var maxX = my$("im").offsetWidth - big.offsetWidth;
        //大圖的縱向的最大移動距離
        var maxY = my$("im").offsetHeight - big.offsetHeight;

        //大圖和小圖的寬度的比例
        var pro = my$("im").offsetWidth / my$("im0").offsetWidth;
        //大圖的橫向移動座標
        var bigImMoveX = x * pro;//maxX / ( small.offsetWidth - mask.offsetWidth);
        var bigImMoveY = y * pro;//maxY / ( small.offsetWidth - mask.offsetWidth);
        //設置圖片移動
        my$("im").style.marginLeft = -bigImMoveX + "px";
        my$("im").style.marginTop = -bigImMoveY + "px";
    };
</script>
</body>
</html>
發佈了17 篇原創文章 · 獲贊 84 · 訪問量 2萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章