中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

如何利用JavaScript實現仿京東放大鏡效果

發布時間:2022-03-08 13:43:47 來源:億速云 閱讀:208 作者:小新 欄目:開發技術

這篇文章主要介紹如何利用JavaScript實現仿京東放大鏡效果,文中介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們一定要看完!

功能實現

1、鼠標經過小圖片盒子,黃色的遮擋層和大圖片顯示,離開時就隱藏2個盒子功能

2、黃色遮擋層跟著鼠標走

把鼠標的坐標給盒子,不斷地進行賦值操作

把鼠標地坐標給遮擋層不合適,因為遮擋層坐標以父盒子為準

首先是獲得鼠標在盒子內地坐標

然后把數值給遮擋層地left和top值

此時用到鼠標移動事件,但是還是在小圖片盒子內移動

發現,遮擋層位置不對,需要再減去盒子自身高度和寬度地一半

遮擋層不能超出小圖片盒子范圍

如果小于0,就把坐標設置為0

如果大于遮擋層最大地移動距離,就把坐標設置為最大地移動距離

遮擋層地最大移動距離:小圖片盒子寬度減去遮擋層盒子寬度

3、移動黃色遮擋層,大盒子跟著圖片走

如何利用JavaScript實現仿京東放大鏡效果

如何利用JavaScript實現仿京東放大鏡效果

如何利用JavaScript實現仿京東放大鏡效果

也太難了、、、、

<!DOCTYPE html>
<html lang="en">
 
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
    <style>
        .box {
            width: 300px;
            height: 300px;
            position: relative;
            border: 1px solid #ccc;
        }
        
        .tupian {
            width: 100%;
            height: 100%;
        }
        /* 不能是box里面所有地img百分百比例,這樣是無法再大盒子里面移動圖片地 */
        
        .mask {
            display: none;
            width: 150px;
            height: 150px;
            background: rgba(228, 248, 138, 0.3);
            position: absolute;
            top: 0px;
            left: 0px;
            cursor: move;
        }
        
        .big {
            display: none;
            width: 400px;
            height: 400px;
            position: absolute;
            top: 0px;
            left: 310px;
            background-color: pink;
            overflow: hidden;
        }
        
        .big img {
            position: absolute;
            top: 0px;
            left: 400px
        }
    </style>
</head>
 
<body>
    <div class="box"><img src="http://img14.360buyimg.com/n1/s450x450_jfs/t1/131049/21/21277/105207/61dfcd46E2318f45d/32bd21d7732845bc.jpg" alt="" class="tupian">
        <div class="mask"></div>
        <div class="big"><img src="http://img14.360buyimg.com/n1/s450x450_jfs/t1/131049/21/21277/105207/61dfcd46E2318f45d/32bd21d7732845bc.jpg" alt="" class="bigimg"></div>
    </div>
 
    <script>
        //當鼠標放在box上,箭頭變為移動
        var tupian = document.querySelector('.tupian')
        var mask = document.querySelector('.mask')
        var big = document.querySelector('.big')
        var box = document.querySelector('.box')
        var bigimg = document.querySelector('.bigimg')
            //鼠標放在小圖片上時,黃色遮擋層顯示以及大盒子顯示
        box.addEventListener('mouseover', function() { //不能是圖片添加的事件,因為mask一顯示就會把圖片給擋住
                mask.style.display = 'block'
                big.style.display = 'block'
            })
            //鼠標離開小圖片,就隱藏
        box.addEventListener('mouseout', function() {
            mask.style.display = 'none'
            big.style.display = 'none'
        })
        box.addEventListener('mousemove', function(e) {
            //先計算出鼠標在盒子內地坐標
            var x = e.pageX - box.offsetLeft
            var y = e.pageY - box.offsetTop
                //減75(盒子地一般)是為了讓鼠標位于盒子地中心
                //mask移動地距離
            var maskx = x - mask.offsetWidth / 2
            var masky = y - mask.offsetHeight / 2 //最好這樣賦值一下,就不用考慮if里面地單位情況
                //約束--設置小盒子移動范圍
            if (maskx <= 0) {
                maskx = 0
            } else if (maskx >= box.offsetWidth - mask.offsetWidth) {
                maskx = box.offsetWidth - mask.offsetWidth
            }
            if (masky <= 0) {
                masky = 0
            } else if (masky >= box.offsetHeight - mask.offsetHeight) {
                masky = box.offsetHeight - mask.offsetHeight
            }
            mask.style.left = maskx + 'px'
            mask.style.top = masky + 'px'
            var maxMax = box.offsetWidth - mask.offsetWidth //遮擋層地最大移動距離
            var bigMax = bigimg.offsetWidth - big.offsetWidth //大圖片地最大移動距離
                //大圖片地移動距離
            var bigx = maskx * bigMax / maxMax
            var bigy = masky * bigMax / maxMax
            bigimg.style.left = -bigx + 'px'
            bigimg.style.top = -bigy + 'px'
        })
 
 
 
 
 
 
 
        // tupian.addEventListener('mouseover', function() {
        //     tupian.addEventListener('mousemove', function(e1) {
        //         mask.style.display = 'block'
        //         var x = e1.pageX - tupian.offsetLeft
        //         var y = e1.pageY - tupian.offsetTop
        //         mask.style.left = x - 75 + 'px'
        //         mask.style.top = y - 75 + 'px'
        //         if (mask.style.bottom < -10) {
        //             mask.style.bottom = 0 + 'px'
        //         }
        //     })
 
        //讓遮罩層跟隨鼠標移動
        // div.addEventListener('mousemove', function(e) {
        //     var a = e.pageX - div.offsetLeft
        //     var b = e.pageY - div.offsetTop
        //     if (a > 75) {
        //         mask.style.left = e.pageX - div.offsetLeft - x + 'px'
        //     }
        //     if (mask.style.left < 0) {
        //         mask.style.left = 0
        //     }
        //     if (b > 75) {
        //         mask.style.top = e.pageY - y + 'px'
        //     }
        //     if (mask.style.top < 0) {
        //         mask.style.top = 0
        //     }
        // mask.style.left = x - 75 + 'px' //鼠標并不一定要在mask的正中間
        // mask.style.top = y - 75 + 'px'
 
        // div.addEventListener('mousemove', fn)
 
        // function fn(e) { //這個函數一定要寫在mousedown函數里面才能取出x和y
        //     //不能讓白色遮罩層出box盒子
        //     mask.style.left = e.pageX - x - 75 + 'px'
        //     mask.style.top = e.pageY - y - 75 + 'px'
        // }
        // })
 
 
        //鼠標離開盒子就取消移動事件
        // div.addEventListener('mouseout', function() {
 
        // div.removeEventListener('mousemove', fn)
        // })
        // })
    </script>
</body>
 
</html>

如何利用JavaScript實現仿京東放大鏡效果

復盤:

如何利用JavaScript實現仿京東放大鏡效果

<!DOCTYPE html>
<html lang="en">
 
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
    <style>
        .box {
            width: 300px;
            height: 300px;
            position: relative;
        }
        
        .pre {
            width: 100%
        }
        
        .mask {
            display: none;
            position: absolute;
            top: 0px;
            left: 0px;
            width: 100px;
            height: 150px;
            background-color: pink;
            opacity: 0.3;
        }
        
        .big {
            /* display: none; */
            position: absolute;
            top: 0px;
            left: 310px;
            width: 400px;
            height: 400px;
            background-color: pink;
            overflow: hidden;
            /* 當大盒子里面地圖片出來地時候,就將出來部分地圖片進行隱藏 */
        }
        /* 鼠標進入小盒子地時候,變為移動 */
        
        .bigtu {
            position: absolute;
            top: 0px;
            left: 0px;
        }
        
        .box:hover {
            cursor: move
        }
    </style>
</head>
 
<body>
    <div class="box">
        <img src="http://img14.360buyimg.com/n1/s450x450_jfs/t1/131049/21/21277/105207/61dfcd46E2318f45d/32bd21d7732845bc.jpg" alt="" class="pre">
        <div class="mask"></div>
        <div class="big"> <img src="http://img14.360buyimg.com/n1/s450x450_jfs/t1/131049/21/21277/105207/61dfcd46E2318f45d/32bd21d7732845bc.jpg" alt="" class="bigtu"></div>
    </div>
    <script>
        //1、鼠標進入小盒子,遮罩層、大盒子出現
        var box = document.querySelector('.box')
        var mask = document.querySelector('.mask')
        var big = document.querySelector('.big')
        var bigtu = document.querySelector('.bigtu')
        box.addEventListener('mouseover', function() {
                mask.style.display = 'block'
                big.style.display = 'block'
            })
            //2、鼠標離開小盒子地時候,遮罩層、大盒子隱藏
        box.addEventListener('mouseout', function() {
                mask.style.display = 'none'
                big.style.display = 'none'
            })
            //3、添加移動效果,遮罩層跟隨鼠標移動,鼠標再小盒子地坐標就是遮罩層地位置
        box.addEventListener('mousemove', function(e) {
            //求鼠標在小盒子里面地坐標
            var x = e.pageX - box.offsetLeft
            var y = e.pageY - box.offsetTop
                //將鼠標地坐標給遮罩層
                // mask.style.left = x + 'px'
                // mask.style.top = y + 'px'
                //鼠標應該位于遮罩層地中心位置
            var maskx = x - mask.offsetWidth / 2
            var masky = y - mask.offsetHeight / 2
 
            //4、應該約束遮罩層地移動范圍,也就是約束鼠標地位置,maskx、masky要大于0,以及要小于一個值,不能初到底部下面或者右邊地右邊
            if (maskx < 0) {
                maskx = 0
            }
            if (maskx > box.offsetWidth - mask.offsetWidth) {
                maskx = box.offsetWidth - mask.offsetWidth
            }
            if (masky < 0) {
                masky = 0
            }
            if (masky > box.offsetHeight - mask.offsetHeight) {
                masky = box.offsetHeight - mask.offsetHeight
            }
            mask.style.left = maskx + 'px'
            mask.style.top = masky + 'px'
                //5、要讓大盒子里面地圖片移動,加相對定位.原理鼠標在小盒子里面移動地距離與鼠標在大盒子里面移動地距離是成比例地.其實就是小盒子圖片地left、top值與大盒子里面地left、top值是成比例地   弄清楚這個比例關系很重要
            var bigtux = maskx * (bigtu.offsetWidth - big.offsetWidth) / (box.offsetWidth - mask.offsetWidth)
            var bigtuy = masky * (bigtu.offsetHeight - big.offsetHeight) / (box.offsetHeight - mask.offsetHeight)
            bigtu.style.left = -bigtux + 'px'
            bigtu.style.top = -bigtuy + 'px'
                //應該也要對大盒子里面地圖片移動范圍進行約束
                //忽視了一點:bigtu地大小是450*450地,所以大盒子不能直接等于450*450;應該小于450*450;這樣圖片在大盒子里面才有移動地余地
                //相當于左側地小盒子,對圖片進行了縮小,需要在大盒子里面顯示原始圖片,位置對應
        })
    </script>
</body>
 
</html>

以上是“如何利用JavaScript實現仿京東放大鏡效果”這篇文章的所有內容,感謝各位的閱讀!希望分享的內容對大家有幫助,更多相關知識,歡迎關注億速云行業資訊頻道!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

和平县| 广宗县| 民和| 濮阳县| 临潭县| 澎湖县| 台东县| 柘荣县| 闻喜县| 会同县| 乌审旗| 五莲县| 台东市| 木兰县| 潼南县| 保德县| 江安县| 云龙县| 吐鲁番市| 阿坝县| 白银市| 巴东县| 赫章县| 嘉黎县| 镇安县| 涪陵区| 丹江口市| 葵青区| 靖西县| 项城市| 松阳县| 清水河县| 白沙| 宣汉县| 勃利县| 尉犁县| 邛崃市| 育儿| 龙川县| 安平县| 富顺县|