放大鏡效果,被普遍的應用於商城的商品展現,其效果相比你們都不陌生。其原理也不是很難,那麼今天就實現下放大鏡效果!
主要的CSS樣式:溢出隱藏overflow:hidden,隱藏圖層display:none,定位position
用的主要事件:鼠標移動事件mousemove()和鼠標hover()css
效果圖:html
這裏須要找2長比例合適的圖片,效果會更好jquery
html部分:ide
這裏須要使用2長必定比例的圖片,在頁面中按比例設置2個div中來存放這2長圖片,並在小圖片的div中按照必定的比例設一個用來放大的區域函數
<div class="img"> <div class="simg"><!--小圖片--> <img src="../做業/images/small.jpg"/> <div id="move"></div><!--放大區域--> </div> <div class="bimg"><!--大圖片--> <img src="../做業/images/big.jpg" /> </div> </div>
CSS部分:code
設置小圖片、大圖片、放大區域排版好後,將放大區域和大圖片隱藏display: none;,由於咱們後面須要鼠標移動到小圖片上是將放大區域和大圖片中對應的部分顯示出來,其中大圖片只取對應的位置,超出的部分隱藏overflow: hidden;htm
<style type="text/css"> .img{width: 350px;height: 350px;border: 1px solid #ccc;margin: 100px;position: relative;cursor:move;} .bimg{position: relative;top: -400px;left: 500px; border: 1px solid #ccc;width: 400px;height: 400px; overflow: hidden;display: none;} #move{position: absolute;width: 100px;height: 100px; background-color: rgba(8,152,202,0.2);top: 0px; left: 0px;display: none;} .bimg>img{position: absolute;left: 0px;top: 0px;} </style>
JS部分:對象
首先:須要經過鼠標的hover()事件,實現鼠標移動到小圖片上時,放大區域和大圖片顯示display:block ;,鼠標移除小圖片時,放大區域和大圖片再次隱藏blog
其次,須要獲取鼠標在小圖片上的位置和放大區域的位置,來實現能夠跟隨鼠標在小圖片上移動來選擇放大的位置mousemove(),要作到這個效果須要:事件
1.經過事件觸發對象event獲取鼠標位置
event.pageX; event.pageY;
2.獲取放大區域的位置
offset().left; offset().top
3.計算出須要移動的距離
須要移動的距離 = 鼠標在頁面中的X座標 - 小圖片距離頁面左邊的距離-放大區域寬度的一半
須要移動的距離 = 鼠標在頁面中的Y座標 - 小圖片距離頁面頂部的距離-放大區域高度的一半
4.同過jquery的css()函數實現移動
最後,實現大圖片對應的移動,這裏要注意,大圖片的必定是與放大區域移動的方向相反的
//爲小圖片添加hover事件 鼠標移動到小圖片上時,放大區域和大圖片的div須要顯示出來,反之隱藏 $(".img").hover(function(){ $(".bimg").css("display","block"); $("#move").css("display","block"); },function(){ $(".bimg").css("display","none"); $("#move").css("display","none"); }); //須要爲小圖片的div添加一個鼠標移動時間 $(".img").mousemove(function(event){ //須要獲取鼠標移動是距離左邊和頂端的距離 var x = event.pageX; var y = event.pageY; //須要計算放大區域的須要移動到的位置 var nx = x - $(".img").offset().left-$("#move").width()/2; var ny = y - $(".img").offset().top-$("#move").height()/2; //判斷移動後是否已經超出的範圍 if(nx < 0){ //左邊超出 nx = 0; } if(nx > $(".img").width()-$("#move").width()){//右邊超出 nx = $(".img").width()-$("#move").width(); } if(ny < 0){ //頂端超出 ny = 0; } if(ny > $(".img").height()-$("#move").height()){//底部超出 ny = $(".img").height()-$("#move").height(); } //設置放大區域的移動 $("#move").css({ left:nx+"px", top:ny+"px" }); //設置大圖片的移動 大圖片的移動方向與放大區域正好相反 $(".bimg>img").css({ left:-nx*$("#move").width()/$(".simg").width()+"px", top:-ny*$("#move").height()/$(".simg").height()+"px" });