前端学习作业,基本上完成了预期放大镜的效果,包括边界判断,鼠标移动,图片缩放等,并且可以适应各种尺寸的图片
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Magnifier</title>
<script type="text/javascript" src="lib/jQuery.js"></script>
<style>
*{
margin: 0;
padding: 0;
list-style: none;
font-size: 0px;
}
img{
display: block;
}
.container{
font-size: 0px;
}
.container .preview{
position: relative;
display: inline-block;
}
.container .preview .indicator{
position: absolute;
background-color: rgba(243, 240, 54, 0.281);
}
.container .preview img{
zoom: 0.5;
}
.container .magnifier{
background-color: gray;
position: relative;
overflow: hidden;
display: inline-block;
}
#aim{
position: absolute;
}
</style>
</head>
<body>
<div class="container">
<div class="preview">
<img id="image" src="./img/testImg2.jpg" alt="">
<div class="indicator"></div>
</div>
<div class="magnifier">
<img src="./img/testImg2.jpg" alt="" id="aim">
</div>
</div>
</body>
<script>
$(function(){
var imgWd, imgHt;
var imgSrc = $("#image").attr("src");
getImageWidth(imgSrc,function(w,h){
console.log({width:w,height:h});
imgWd = w;
imgHt = h;
});
$(".indicator").css("width",imgWd/4+'px').css("height",imgHt/4+'px');
$(".magnifier").css("width",imgWd/2+'px').css("height",imgHt/2+'px');
$(".preview").mousemove(function(event){
var positionX = event.pageX - $(this).offset().left;
var positionY = event.pageY - $(this).offset().top;
var centerX = positionX-(imgWd/4)/2<0?0:(positionX-(imgWd/4)/2>(imgWd/4)?(imgWd/4):positionX-(imgWd/4)/2);
var centerY = positionY-(imgHt/4)/2<0?0:(positionY-(imgHt/4)/2>(imgHt/4)?(imgHt/4):positionY-(imgHt/4)/2);
$(".indicator").css("left",centerX +'px').css("top",centerY +'px');
$("#aim").css("left",-centerX*2+'px').css("top",-centerY*2+'px');
})
function getImageWidth(url,callback){
var img = new Image();
img.src = url;
if(img.complete){
callback(img.width, img.height);
}else{
img.onload = function(){
callback(img.width, img.height);
}
}
}
})
</script>
</html>
效果图