效果:css
- 鼠標放上去會有半透明遮罩、右邊會有大圖片局部圖。
- 鼠標移動時右邊的大圖片也會局部移動。
技術點
:html
Event
Event 是一個事件對象,當一個事件發生後,和當前事件發生相關的詳細信息被臨時存儲到一個指定的地方,也就是event對象,以方便咱們在須要的時候調用。this
事件捕獲
,定位
code
`難點``:計算。htm
**接下來是demo分享:對象
css部分:seo
* { margin: 0; padding: 0; } /* img { vertical-align: top; } */ .box { width: 350px; height: 350px; position: relative; border: 1px solid black; margin: 150px 0 0 300px; } .big { width: 450px; height: 450px; position: absolute; border: 1px solid black; left: 400px; top: 0; display: none; overflow: hidden; } .small { position: relative; } .mask { width: 100px; height: 100px; background-color: rgba(255, 255, 0, 0.4); position: absolute; left: 0; top: 0; cursor: move; display: none; } .big img { position: absolute; left: 0; top: 0; }
html結構部分:事件
<div class="box" id="oBox"> <div class="small" id="oSmall"> <img src="./images/001.jpg" alt=""> <div class="mask" id="oMask"></div> </div> <div class="big" id="oBig"> <img src="./images/0001.jpg" alt=""> </div> </div>
//第一步獲取節點 let box = document.getElementById('oBox'); let small = box.children[0]; //獲取盒子的第一個子節點samll let big = box.children[1]; //獲取盒子的第二個子節點big let mask = small.children[1]; //獲取小盒子裏的遮罩 let bigImg = big.children[0]; //獲取大盒子裏的圖片 //鼠標進入small 遮罩(mask)大盒子(big)display:block small.onmouseover = function() { mask.style.display = 'block'; big.style.display = 'block'; }; //鼠標離開small 遮罩(mask)大盒子(big)display:none small.onmouseout = function() { mask.style.display = 'none'; big.style.display = 'none'; }; let x = 0; let y = 0; small.onmousemove = function(even) { var even = even || window.event; // 獲取鼠標在small裏的座標 let x = even.clientX - this.offsetParent.offsetLeft - mask.offsetWidth / 2; let y = even.clientY - this.offsetParent.offsetTop - mask.offsetHeight / 2; // 限制住鼠標的座標致使遮罩的位置越界 if (x < 0) { x = 0; } else if (x > small.offsetWidth - mask.offsetWidth) { x = small.offsetWidth - mask.offsetWidth; } if (y < 0) { y = 0; } else if (y > small.offsetHeight - mask.offsetHeight) { y = small.offsetHeight - mask.offsetHeight; } mask.style.left = x + 'px'; mask.style.top = y + 'px'; //注意大圖片的方向 bigImg.style.top = -y * big.offsetHeight / small.offsetHeight + 'px'; bigImg.style.left = -x * big.offsetWidth / small.offsetWidth + 'px'; };