版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/qq_34343637/article/details/82469996
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>小图大图</title> <style type="text/css"> *{ margin: 0; padding: 0; }
#box{ width: 312px; height: 467px; margin: 100px; border: 1px solid #333; position: relative;
}
/*掩盖的盒子与显示的盒子纯在着一定的比例否者会显示不对称
大图显示大小 = (大图/小图)/小图的掩盖
*/ #box1{ width: 288px; height: 289px; margin: 0 350px; left:0; top:0; border: 1px solid #333; position: absolute; overflow: hidden; display: none;
} #mask{ left: 0; top: 0; width: 100px; height: 100px; position: absolute; background-color: rgba(0,255,0,.3); display: none;
} </style>
</head> <body> <div id="box"> <img src="images/small.png" id="small"> <div id="mask"></div> <div id="box1"> <img src="images/big.jpg"> </div> </div>
<script type="text/javascript"> function boxMouserMoveHandle(e){ maskObj.style.display = "block"; box1Obj.style.display = "block"; //设置需要减去margin,使得图片回到,鼠标的左上角,减去自身的width height的一半,使得鼠标出现mask的中间 var maskleft = e.clientX-100-maskObj.offsetWidth/2; var masktop = e.clientY-100-maskObj.offsetHeight/2; // console.log(boxObj.offsetLeft); // //(1)使用 e.client作为参考点,进行马赛克的判断。 // // maskObj.style.left = e.clientX<boxObj.offsetLeft+maskObj.offsetWidth/2? 0+"px" :maskObj.offsetLeft; // maskObj.style.left = e.clientX>=boxObj.offsetLeft+boxObj.offsetWidth-maskObj.offsetWidth/2 ? (boxObj.offsetWidth-maskObj.offsetWidth)+"px":maskObj.offsetLeft; // maskObj.style.top = e.clientY<boxObj.offsetTop+maskObj.offsetHeight/2? 0+"px" :maskObj.offsetTop; // maskObj.style.top = e.clientY>boxObj.offsetTop+boxObj.offsetHeight-maskObj.offsetHeight/2?boxObj.offsetHeight-maskObj.offsetHeight+ "px" :maskObj.offsetTop;
//(2)由于image\mask是可以是属于box里面的设置为相对定位。因此可以使用相对定位的位置进行定位。 //mask的最小距离是0 ,最大的距离位box的距离-mask的width maskleft=maskleft<0?0:maskleft; masktop =masktop<0?0:masktop; maskleft = maskleft>boxObj.offsetWidth-maskObj.offsetWidth?boxObj.offsetWidth-maskObj.offsetWidth:maskleft; masktop =masktop>boxObj.offsetHeight-maskObj.offsetHeight?boxObj.offsetHeight-maskObj.offsetHeight0:masktop; maskObj.style.left =maskleft+"px"; maskObj.style.top =masktop +"px";
// 按比例移动图片 var mvbigW = ((bigObj.offsetWidth-box1Obj.offsetWidth)/(boxObj.offsetWidth-maskObj.offsetWidth))*maskleft; var mvbigH = ((bigObj.offsetHeight-box1Obj.offsetHeight)/(boxObj.offsetHeight-maskObj.offsetHeight))*masktop; bigObj.style.marginLeft = -mvbigW+"px"; bigObj.style.marginTop = -mvbigH+"px";
} function boxMouserOutHandle(){
maskObj.style.display = "none"; box1Obj.style.display = "none";
} var boxObj = document.getElementById("box"); var smallObj = boxObj.children[0]; var maskObj = boxObj.children[1]; var box1Obj= boxObj.children[2]; var bigObj= boxObj.children[2].children[0]; boxObj.onmousemove=boxMouserMoveHandle; boxObj.onmouseout=boxMouserOutHandle;
</script> </body> </html>