放大鏡效果,被廣泛的應用於商城的商品展示,其效果相比大家都不陌生。其原理也不是很難,那麼今天就實現下放大鏡效果!
主要的CSS樣式:溢出隱藏overflow:hidden,隱藏圖層display:none,定位position
用的主要事件:鼠標移動事件mousemove()和鼠標hover()
效果圖:
這裏需要找2長比例合適的圖片,效果會更好
html部分:
這裏需要使用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部分:
設置小圖片、大圖片、放大區域排版好後,將放大區域和大圖片隱藏display: none;,因爲我們後面需要鼠標移動到小圖片上是將放大區域和大圖片中對應的部分顯示出來,其中大圖片只取對應的位置,超出的部分隱藏overflow: hidden;
<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 ;,鼠標移除小圖片時,放大區域和大圖片再次隱藏
其次,需要獲取鼠標在小圖片上的位置和放大區域的位置,來實現可以跟隨鼠標在小圖片上移動來選擇放大的位置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"
});