最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

javascript實現(xiàn)簡單放大鏡效果

 更新時間:2021年09月30日 09:02:32   作者:qq_39111074  
這篇文章主要為大家詳細介紹了javascript實現(xiàn)簡單放大鏡效果,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下

一個大盒子中有一張圖片,鼠標放上去會出現(xiàn)一個半透明的遮罩層,鼠標移動,遮罩層跟著移動,盒子旁邊還有一個放大的圖片,跟著遮罩層移動的位置而改變放大圖的位置,鼠標離開大盒子,遮罩層和放大圖片消失

實現(xiàn)思路

1、html、css將盒子,遮罩層、放大圖片頁面編輯好,設(shè)置遮罩層和放大圖片默認隱藏
2、獲取元素對象,將大盒子綁定鼠標事件
鼠標經(jīng)過- - -mouseover,鼠標經(jīng)過時設(shè)置遮罩層和放大圖顯示:display設(shè)置成'block'
鼠標離開- - -mouseout,鼠標經(jīng)過時設(shè)置遮罩層和放大圖顯示:display設(shè)置成'none'
3、計算出鼠標在大盒子中的位置
4、讓鼠標在遮罩層的中間位置:讓遮罩層相對鼠標位置向上向左移動一半距離就行
遮罩層的位置- - -給它絕對定位,賦值相對盒子中的向上向左偏移量
5、限制遮罩層在大盒子里移動- - -判斷偏移量的值,<=0 的時候,偏移量為0
6、放大圖隨著遮罩層的移動而改變位置
遮罩層移動值 / 遮罩層移動最大距離 = 放大圖移動距離 / 放大圖移動最大距離
根據(jù)這個關(guān)系式,得到放大圖的移動距離
將移動距離賦值給放大圖的偏移量top、left

注意:放大圖的偏移量給成負值,和遮罩層移動方向相反

代碼示例

<!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>手機詳情頁</title>
    <!-- <link rel="stylesheet" href="css/detail.css" >
    <script src="js/detail.js"></script> -->
    <style>
        * {
            margin: 0;
            padding: 0;
        }
        
        .detail-content {
            width: 1200px;
            margin: 0 auto;
        }
        
        img {
            border: 0;
            vertical-align: middle;
        }
        
        .preview_img {
            position: relative;
            width: 400px;
            height: 400px;
            margin-top: 30px;
            border: 1px solid #ccc;
        }
        
        .preview_img img {
            width: 100%;
            height: 100%;
        }
        
        .mask {
            display: none;
            position: absolute;
            top: 0;
            left: 0;
            width: 300px;
            height: 300px;
            background-color: pink;
            opacity: .5;
            cursor: move;
        }
        
        .big {
            display: none;
            position: absolute;
            top: 0;
            left: 410px;
            width: 500px;
            height: 500px;
            border: 1px solid #ccc;
            background-color: pink;
            z-index: 999;
            overflow: hidden;
        }
        
        .big img {
            position: absolute;
            top: 0;
            left: 0;
            width: 800px;
            height: 800px;
        }
    </style>
</head>

<body>
    <div class="detail-content">
        <div class="preview_img">
            <img src="upload/s3.png" alt="">
            <div class="mask"></div>
            <div class="big">
                <img src="upload/big.jpg" alt="" class="bigImg">
            </div>
        </div>
    </div>

    <script>
        var previewImg = document.querySelector('.preview_img');
        var mask = document.querySelector('.mask');
        var big = document.querySelector('.big');
        var bigImg = document.querySelector('.bigImg');

        // 鼠標經(jīng)過盒子事件
        previewImg.addEventListener('mouseover', function() {
            // 設(shè)置遮擋層和放大圖顯示
            mask.style.display = 'block';
            big.style.display = 'block';
        })

        // 鼠標離開盒子事件
        previewImg.addEventListener('mouseout', function() {
            // 設(shè)置遮擋層和放大圖隱藏
            mask.style.display = 'none';
            big.style.display = 'none';
        })

        // 鼠標在盒子內(nèi)移動事件
        previewImg.addEventListener('mousemove', function(e) {
            // 獲取鼠標在盒子中的位置
            var x = e.pageX - this.offsetLeft;
            var y = e.pageY - this.offsetTop;

            // 計算出遮擋層的移動值,讓鼠標在遮擋層中間位置
            var maskX = x - mask.offsetWidth / 2;
            var maskY = y - mask.offsetHeight / 2;

            // 盒子為正方形,所以只算最大水平方向 X軸 移動值就行,Y軸最大移動值和 X軸 一致
            var maskMax = previewImg.offsetWidth - mask.offsetWidth;

            // 限制遮擋層在盒子內(nèi)移動
            if (maskX <= 0) {
                maskX = 0;
            } else if (maskX >= maskMax) {
                maskX = maskMax;
            }

            if (maskY <= 0) {
                maskY = 0;
            } else if (maskY >= maskMax) {
                maskY = maskMax;
            }

            mask.style.left = maskX + 'px';
            mask.style.top = maskY + 'px';

            // 計算出放大圖的最大移動值,大圖水平移動值 = 遮擋層移動值 * 大圖最大移動距離 / 遮擋層最大移動距離
            var bigMax = bigImg.offsetWidth - big.offsetWidth;

            var bigX = maskX * bigMax / maskMax;
            var bigY = maskY * bigMax / maskMax;

            bigImg.style.left = -bigX + 'px';
            bigImg.style.top = -bigY + 'px';

        })
    </script>
</body>

</html>

頁面效果:

以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。

相關(guān)文章

  • js實現(xiàn)百度搜索提示框

    js實現(xiàn)百度搜索提示框

    本文主要分享了js實現(xiàn)百度搜索提示框的示例代碼,具有很好的參考價值,下面跟著小編一起來看下吧
    2017-02-02
  • ECMAScript6中Map/WeakMap詳解

    ECMAScript6中Map/WeakMap詳解

    這篇文章主要介紹了ECMAScript6中Map/WeakMap詳解的相關(guān)資料,需要的朋友可以參考下
    2015-06-06
  • JavaScript實戰(zhàn)(原生range和自定義特效)簡單實例

    JavaScript實戰(zhàn)(原生range和自定義特效)簡單實例

    下面小編就為大家?guī)硪黄狫avaScript實戰(zhàn)(原生range和自定義特效)簡單實例。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2016-08-08
  • 移動端H5開發(fā) Turn.js實現(xiàn)很棒的翻書效果

    移動端H5開發(fā) Turn.js實現(xiàn)很棒的翻書效果

    這篇文章主要為大家詳細介紹了Turn.js實現(xiàn)很棒的翻書效果,對Turn.js翻書效果的實現(xiàn)進行總結(jié),感興趣的小伙伴們可以參考一下
    2016-06-06
  • JavaScript中this的9種應(yīng)用場景及三種復(fù)合應(yīng)用場景

    JavaScript中this的9種應(yīng)用場景及三種復(fù)合應(yīng)用場景

    本文通過9中應(yīng)用場景給大家分析this關(guān)鍵字的用法,需要了解的朋友可以參考下本文
    2015-09-09
  • 如何使用JS console.log()技巧提高工作效率

    如何使用JS console.log()技巧提高工作效率

    這篇文章主要介紹了如何使用JS console.log()技巧提高工作效率,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下
    2020-10-10
  • javascript如何實現(xiàn)create方法

    javascript如何實現(xiàn)create方法

    這篇文章主要介紹了javascript如何實現(xiàn)create方法,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下
    2019-11-11
  • 前端微信H5公眾號實現(xiàn)授權(quán)登錄的方法總結(jié)

    前端微信H5公眾號實現(xiàn)授權(quán)登錄的方法總結(jié)

    這篇文章主要介紹了如何在微信公眾號中實現(xiàn)網(wǎng)頁授權(quán)功能,包括創(chuàng)建微信服務(wù)公眾號、配置重定向地址、調(diào)試和開發(fā)使用等步驟,文中通過圖文及代碼介紹的非常詳細,需要的朋友可以參考下
    2025-01-01
  • 微信小程序:報錯(in promise) MiniProgramError

    微信小程序:報錯(in promise) MiniProgramError

    這篇文章主要介紹了微信小程序:報錯(in promise) MiniProgramError,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-10-10
  • 如何在javascript 中使用 xmlHttpRequest 發(fā)送 POST 請求

    如何在javascript 中使用 xmlHttpRequest 發(fā)送 POST

    本文將通過不同的示例解釋如何使用JavaScript代碼在AJAX編程中發(fā)送 XMLHttpRequest post 請求,本文通過實例代碼給大家介紹的非常詳細,對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友參考下吧
    2023-07-07

最新評論

招远市| 南雄市| 疏勒县| 岳阳市| 潼南县| 和硕县| 开远市| 蕉岭县| 聊城市| 恭城| 多伦县| 桑日县| 蕉岭县| 新沂市| 屯门区| 芒康县| 凤山市| 遂平县| 泽州县| 安乡县| 正镶白旗| 建昌县| 温宿县| 淳安县| 当雄县| 泸溪县| 广西| 新建县| 呼图壁县| 剑川县| 望奎县| 望城县| 名山县| 景洪市| 福贡县| 错那县| 乌鲁木齐县| 达日县| 辽中县| 饶阳县| 昌图县|