案例:放大镜
来自CloudWiki
<!DOCTYPE html> <html> <head>
<meta charset="utf-8"> <meta http-equiv="X-UA-Compatible" content="IE=edge"> <title>放大镜</title> <link rel="stylesheet" href=""> <style> body{ margin: 0; padding: 0; } img{ display: block; } .header{ height:100px; } .center{ width:800px; margin:0 auto; } .box{ position:relative; width:400px; } .box .thumb{ position:relative; width:400px; height:400px; } .box .thumb img{ width:100%; height:100%; } .box .thumb .move{ position:absolute; top:0px; left:0px; display:none; width:200px; height:200px; background-color: rgba(0,0,0,0.4); } .box .scale{ display:none; position:absolute; right:-420px; top:0; width:400px; height:400px; border:1px solid #ccc; overflow:hidden; } .box .scale img{ position:absolute; left:0; top:0; } .box .thumb:hover .move{ display:block; } .box .thumb:hover+.scale{ display:block; } </style>
</head> <body>
<img src="img/lianyiqunSmall1.jpg">
<img src="img/lianyiqunBig1.jpg">
<script>
var zmFdj=function(){ var thumbElem=document.getElementsByClassName("thumb")[0], // 获取缩略图距离页面左边的距离(可能有滚动条) thumbPosX=Math.round(thumbElem.getBoundingClientRect().left+document.documentElement.scrollLeft), // 获取缩略图距离页面顶部的距离 thumbPosY=Math.round(thumbElem.getBoundingClientRect().top+document.documentElement.scrollTop); // 获取移动的元素 var moveElem=document.getElementsByClassName("move")[0];
thumbElem.onmousemove=function(e){ // 获取移动的元素的宽和高 var moveElemW=moveElem.offsetWidth; var moveElemH=moveElem.offsetHeight; // 计算移动元素距离缩略图左边和顶部的距离 var x=e.pageX-thumbPosX; var y=e.pageY-thumbPosY; // 设置鼠标指针在移动元素的中间位置 moveElem.style.left=x-moveElemW/2+"px"; moveElem.style.top=y-moveElemH/2+"px"; // 移动元素不能超出区域 if(parseInt(moveElem.style.left)<0){ moveElem.style.left=0; }else if(parseInt(moveElem.style.left)>(thumbElem.offsetWidth-moveElemW)){ moveElem.style.left=thumbElem.offsetWidth-moveElemW+"px"; } if(parseInt(moveElem.style.top)<0){ moveElem.style.top=0; }else if(parseInt(moveElem.style.top)>(thumbElem.offsetHeight-moveElemH)){ moveElem.style.top=thumbElem.offsetHeight-moveElemH+"px"; } // 放大的倍数 var sca=thumbElem.offsetWidth/moveElemW; var scaleEle=document.getElementsByClassName("scale")[0]; // 放大图片的位置 // 向左边拉动放大镜20px 放大倍数是两倍 就是要把大图的定位的left值向负方向移动 2*20px var img=scaleEle.getElementsByTagName("img")[0]; img.style.left=-(sca*parseInt(moveElem.style.left))+"px"; img.style.top=-(sca*parseInt(moveElem.style.top))+"px"; } } zmFdj();
</script>
</body>
</html>