jQuery 放大鏡效果

漫漫长路</>發表於2024-10-07
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>放大鏡效果</title>
<style type="text/css">
* {
margin: 0;
padding: 0;
}
.small {
margin-left:40px;
margin-top:50px;
width: 150px;
height: 150px;
/*border: 2px solid yellow;*/
}
.small>img {
width: 150px;
height: 150px;
}
.slider {
width: 50px;
height: 50px;
background: rgba(180,180,135,0.3);
position: absolute;
display: none;
}
#big {
//設定為固定大小;
width: 200px;
height: 200px;
position: absolute;
/* border: 2px solid red;*/
overflow: hidden;
display: none;
}

</style>
</head>
<body>
<!--縮圖-->
<div class="small">
<img src="https://img1.baidu.com/it/u=1465664392,2808406094&fm=253&fmt=auto&app=120&f=JPEG?w=800&h=800" />
<!--放大鏡,在原圖不上的小塊-->
<div class="slider"></div>
</div>
<!--放大鏡區域,大圖,設定為none隱藏-->
<div id="big">
<img id="bigImg" src="https://img1.baidu.com/it/u=1465664392,2808406094&fm=253&fmt=auto&app=120&f=JPEG?w=800&h=800" />
</div>

even.clientX<input type="text" value="0" id="test" /><br/>
even.clientY<input type="text" value="0" id="test1" />
<script src="https://cdn.staticfile.net/jquery/1.10.2/jquery.min.js">
</script>
<script type="text/javascript">

var small = $(".small")[0];
var slider = $(".slider")[0];
var big = document.getElementById("big");//試一試js獲取
var bigImg = document.getElementById("bigImg");

//讓slider跟隨滑鼠移動.給小的方塊繫結事件
$(".small").mousemove(function(e) {
var even = e || event; //相容火狐瀏覽器
var x = even.clientX - small.offsetLeft - slider.offsetWidth/2;
var y = even.clientY - small.offsetTop - slider.offsetHeight/2;
//測試even.clientX和even.clientY
$("#test").val(even.clientX);
$("#test1").val(even.clientY);
//水平方向的最大值
var maxX = small.clientWidth - slider.clientWidth;
//豎直方向的最大值
var maxY = small.clientHeight - slider.clientHeight;
if(x<0){
//相當於超出左側,超出左側時,拉回
x=0;
}
//超出右側時拉回
if(x>maxX){
x = maxX;
}
//頂部超出
if(y<0){
y=0;
}
//底部超出
if(y>maxY){
y = maxY;
}
slider.style.top = (y+small.offsetTop) + "px";
slider.style.left = (x+small.offsetLeft) + "px";
//放大的圖片的主要實現程式碼:比例計算, big.scrollLeft是id=big的div中下方滾軸的位置
//由於id=big的div設定成固定大小,而圖片又非常大,所以這個div就像個放大鏡一樣在大圖上晃
//比例計算很簡單,滑鼠在縮圖的位置與縮圖寬高比=滑鼠在大圖位置與大圖寬高比,現在未知數是大圖滑鼠的位置
big.scrollLeft = x/maxX * (bigImg.clientWidth - big.clientWidth) ;
big.scrollTop = y/maxY * (bigImg.clientHeight -big.clientHeight) ;
});

//滑鼠移入事件
$(".small").mouseenter(function(){
//滑鼠移入到縮圖時候實現,上面出現的小的方塊
$(".slider").css("display","block");
$("#big").css("top",small.offsetTop+"px");
//隱藏的大圖=獲取左圖的左邊位置+寬度+10(隔開點縫隙與縮圖)+px
big.style.left = small.offsetLeft + small.offsetWidth + 10 + "px";
//右側的大圖區域顯示出來圖片
$("#big").css("display","block");
});

//移除事件
//新增滑鼠移出事件,滑鼠移出縮圖的時候
$(".small").mouseleave(function(){
$(".slider").css("display","none");
$("#big").css("display","none");
});
</script>
</body>
</html>

相關文章