JS放大鏡

<!doctype html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport"
          content="width=device-width, user-scalable=no, initial-scale=1.0, maximum-scale=1.0, minimum-scale=1.0">
    <meta http-equiv="X-UA-Compatible" content="ie=edge">
    <title>Document</title>
    <style>
        *{
            margin:0;
            padding:0;
        }
        #box{
            width: 350px;
            height: 350px;
            border:1px solid #ccc;
            position: relative;
            margin:100px;
        }
        #small{
            position: relative;
        }
        #mask{
            width: 100px;
            height: 100px;
            position: absolute;
            top:0;
            left:0;
            background: rgba(255,255,0,.4);
            cursor: move;
            display: none;
        }
        #big{
            width: 450px;
            height: 450px;
            position: absolute;
            top:0;
            left: 360px;
            overflow: hidden;
            display: none;
        }
        #big img{
            position: absolute;
            top:0;
            left:0;
        }
    </style>
</head>
<body>
<div id="box">
    <div id="small">
        ![](images/001.jpg)
        <div id="mask"></div>
    </div>
    <div id="big">
        ![](images/0001.jpg)
    </div>
</div>
<script>
    // 獲取元素
    var box = document.getElementById("box");
    var small = document.getElementById("small");
    var mask = document.getElementById("mask");
    var big = document.getElementById("big");
    var bigImg = big.querySelector("img");

    small.onmouseover = function () {
        mask.style.display  = "block";
        big.style.display = "block";
    };
    small.onmouseout = function () {
        mask.style.display  = "none";
        big.style.display = "none";
    };

    small.onmousemove = function (event) {
       var e = event ||window.event;
       // 獲取鼠標(biāo)位置(可視區(qū)域)
       var mX = e.clientX;
       var mY = e.clientY;
       // 計算放大鏡的移動范圍
        var maxLeft = box.offsetWidth - mask.offsetWidth;
        var maxTop = box.offsetHeight - mask.offsetHeight;
        // 設(shè)置臨時位置
        var tempLeft = mX - box.offsetLeft - mask.offsetWidth / 2;
        var tempTop = mY - box.offsetTop - mask.offsetHeight / 2;
       //  設(shè)置最終位置
        var nowLeft = 0;
        var nowTop = 0;
        if(tempLeft >= maxLeft){
            nowLeft = maxLeft;
        }else if(tempLeft>0 && tempLeft < maxLeft){
            nowLeft = tempLeft;
        }
        if(tempTop >= maxTop){
            nowTop = maxTop;
        }else if(tempTop > 0 && tempTop < maxTop){
            nowTop = tempTop;
        }

        // 遮罩跟隨鼠標(biāo)
        mask.style.left = nowLeft + "px";
        mask.style.top = nowTop + "px";

        // 計算移動比例
        var ratioX = box.offsetWidth / bigImg.offsetWidth;
        var ratioY = box.offsetHeight / bigImg.offsetHeight;
        // 大圖位置
        bigImg.style.left = - nowLeft / ratioX + "px";
        bigImg.style.top = - nowTop / ratioY + "px";

    }

</script>
</body>
</html>

這種布局方式相對來說更好操作,小圖和大圖在同一個盒子里浊闪;
難點在于獲取鼠標(biāo)在盒子中的位置恼布,不明白的朋友可以自己畫圖,可以更直觀的理解搁宾。
再一點就是遮罩移動折汞,大圖移動,強調(diào)下盖腿,移動的不是大圖的父級盒子爽待,而是圖片本身,根據(jù)圖片比例移動翩腐,比如鸟款,遮罩在小圖上移動1px,那么在大盒子上移動的就是 1 / 小圖 / 大圖 茂卦。代碼中有所體現(xiàn)何什,如有哪里不清楚,請在下方留言等龙,我會第一時間回復(fù)富俄!

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市而咆,隨后出現(xiàn)的幾起案子霍比,更是在濱河造成了極大的恐慌,老刑警劉巖暴备,帶你破解...
    沈念sama閱讀 219,110評論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件悠瞬,死亡現(xiàn)場離奇詭異,居然都是意外死亡涯捻,警方通過查閱死者的電腦和手機浅妆,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,443評論 3 395
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來障癌,“玉大人凌外,你說我怎么就攤上這事√握悖” “怎么了康辑?”我有些...
    開封第一講書人閱讀 165,474評論 0 356
  • 文/不壞的土叔 我叫張陵摄欲,是天一觀的道長。 經(jīng)常有香客問我疮薇,道長胸墙,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,881評論 1 295
  • 正文 為了忘掉前任按咒,我火速辦了婚禮迟隅,結(jié)果婚禮上喇辽,老公的妹妹穿的比我還像新娘浆劲。我一直安慰自己,他們只是感情好础拨,可當(dāng)我...
    茶點故事閱讀 67,902評論 6 392
  • 文/花漫 我一把揭開白布掠抬。 她就那樣靜靜地躺著吼野,像睡著了一般。 火紅的嫁衣襯著肌膚如雪剿另。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,698評論 1 305
  • 那天贬蛙,我揣著相機與錄音雨女,去河邊找鬼。 笑死阳准,一個胖子當(dāng)著我的面吹牛氛堕,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播野蝇,決...
    沈念sama閱讀 40,418評論 3 419
  • 文/蒼蘭香墨 我猛地睜開眼讼稚,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了绕沈?” 一聲冷哼從身側(cè)響起锐想,我...
    開封第一講書人閱讀 39,332評論 0 276
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎乍狐,沒想到半個月后赠摇,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,796評論 1 316
  • 正文 獨居荒郊野嶺守林人離奇死亡浅蚪,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,968評論 3 337
  • 正文 我和宋清朗相戀三年藕帜,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片惜傲。...
    茶點故事閱讀 40,110評論 1 351
  • 序言:一個原本活蹦亂跳的男人離奇死亡洽故,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出盗誊,到底是詐尸還是另有隱情时甚,我是刑警寧澤隘弊,帶...
    沈念sama閱讀 35,792評論 5 346
  • 正文 年R本政府宣布,位于F島的核電站撞秋,受9級特大地震影響长捧,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜吻贿,卻給世界環(huán)境...
    茶點故事閱讀 41,455評論 3 331
  • 文/蒙蒙 一串结、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧舅列,春花似錦肌割、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,003評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至榨惠,卻和暖如春奋早,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背赠橙。 一陣腳步聲響...
    開封第一講書人閱讀 33,130評論 1 272
  • 我被黑心中介騙來泰國打工耽装, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人期揪。 一個月前我還...
    沈念sama閱讀 48,348評論 3 373
  • 正文 我出身青樓掉奄,卻偏偏與公主長得像,于是被迫代替她去往敵國和親凤薛。 傳聞我的和親對象是個殘疾皇子姓建,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 45,047評論 2 355

推薦閱讀更多精彩內(nèi)容

  • <!doctype html> *{ margin:0; padding:0;} box{ pos...
    教我情何以堪閱讀 299評論 0 0
  • [目錄] 【簡單的實現(xiàn)放大鏡動能】 成果圖 放大鏡的原理 網(wǎng)頁結(jié)構(gòu) 實現(xiàn)步驟第一步 獲取元素第二步 注冊鼠標(biāo)進...
    頑皮的雪狐七七閱讀 3,143評論 6 14
  • 前言 隨手打開一個電商網(wǎng)站(如淘寶),查看商品的時候缤苫, 把鼠標(biāo)放到圖片上都可以看到圖片的更多細節(jié)速兔,像把圖片局部放大...
    jazenye閱讀 1,402評論 0 10
  • 經(jīng)常逛某寶可以發(fā)現(xiàn),查看商品時都有如下的放大功能活玲,鼠標(biāo)放到圖片上可以看到圖片的細節(jié)憨栽,那么它是如何實現(xiàn)的呢?是真的將...
    丶chlorine閱讀 876評論 1 3
  • 終于拔掉了最后一顆智齒翼虫。從20歲開始屑柔,斷斷續(xù)續(xù)地長了十幾年,我終于長齊了4顆智齒珍剑。雖然智慧沒見的增長掸宛,但是牙齒確實...
    游泳的魚_cc71閱讀 941評論 0 3