前言:
相信不少同窗在瀏覽購物網站的時候都會用到過放大鏡的功能,這個功能在平常的網站也會常常用到。接下來咱們開始實現一下它吧;css
(1)首先了解一下放大鏡效果的html架構:以下圖,它由兩部分組成。html
html: <div id="box"> <div id="small"></div> </div> <div id="big"> <img src="12.png" id="imgs"/> </div>
第一部分的原理是:設置box的background爲須要放大的圖片,同時背景的寬高爲100%。再將box的寬高設爲300px,這樣背景圖片就能夠撐滿box了。而後經過監聽box的mousemove事件,控制紅色小框塊的移動。這個紅色小框塊就是要放大的地方。canvas
第二部分的原理是:設置big裏面的img爲box的寬度的3倍(這裏的3倍就是放大鏡的放大倍數,固然這個值是能夠自由選擇的。)。同時big塊的寬高爲350px,用來限制img的顯示。而後經過移動img的left,top來達到放大鏡的效果。架構
css代碼: html,body { margin: 0; padding:0; } #box{ width: 300px; height: 300px; position: relative; background: url(12.png); background-size:100% 100%; } #box #small{ width: 100px; height: 100px; position: absolute; top: 0; left: 0; background: red; opacity: 0.6; } #big{ width: 350px; height: 350px; overflow: hidden; position: relative; display: none; } #big img{ width: 900px; height: 900px; position: absolute; }
(2)js部分:網站
var box = document.querySelector('#box'); var small = document.querySelector('#small'); var big = document.querySelector('#big'); var img = document.querySelector('#imgs'); //監聽box的mousemove事件 box.onmousemove = function(e){ //獲取鼠標的x、y座標。爲何要減去50呢?爲了讓鼠標恰好在small紅色小方塊的中心。 var top = e.clientY-50; var left = e.clientX-50; //限制small小方塊移出box的範圍 if(top > 200){top = 200}; if(top < 0){top = 0}; if(left > 200){left = 200}; if(left < 0){left = 0}; //動態設置small小方塊的位置,讓小方塊跟隨鼠標移動 small.style.left = left + 'px'; small.style.top = top + 'px'; //讓big裏面的圖片跟隨鼠標的移動而移動。這裏爲何要乘以(-3)呢?由於big裏面的大圖是box的3倍。鼠標在box上面向右移動1px,那麼big裏面的大圖就要向左移動(1 x -3)px才能達到咱們想要的效果。 img.style.top = top*(-3) + 'px'; img.style.left = left*(-3) + 'px'; } //監聽box的onmouseenter事件 box.onmouseenter = function(e){ //當鼠標進入box範圍的時候,顯示放大效果 big.style.display='block'; } //監聽box的onmouseleave 事件 box.onmouseleave = function(e){ //當鼠標移出box範圍的時候,隱藏放大效果 big.style.display='none'; }
好了,css+js實現放大鏡的功能到這裏就完成了。很簡單吧。不過這只是簡單的實現,還有使用canvas實現的方法。url
不能只看不動手的喔,本身動手敲一遍,就好理解不少了。spa