放大镜效果

HTML

<div id="div1">
	<img src="img/big.jpg"/>
	<span></span>
	<div class="mark"></div>
</div>
<div id="div2">
	<img src="img/big.jpg"/>
</div>

CSS

#div1{
	 400px;
	height: 200px;
	overflow: hidden;
	position: relative;
}
#div1 img{
	 100%;
	height: 100%;
}
.mark{
	 100%;
	height: 100%;
	position: absolute;
	left: 0;
	top: 0;
	background: transparent;
}
#div1 span{
	position: absolute;
	 100px;
	height: 100px;
	background: yellow;
	opacity: 0.5;
	filter: alpha(opacity=50);
	left: 0;
	top: 0;
	display: none;
	z-index: 9999;
}
#div2{
	 300px;
	height: 300px;
	margin-top: 20px;
	display: none;
	overflow: hidden;
	position: relative;
}
#div2 img{
	 800px;
	height: 400px;
	position: absolute;
}

JS

//span抖动闪现
//1.js:onmouseenter/onmouseleave
//最早ie firefox chrome,做兼容非常的麻烦
//css:加一个曾
var oDiv=document.getElementById('div1');
var oDiv1=document.getElementById('div2');
var oSpan=oDiv.getElementsByTagName('span')[0];
var oImg=oDiv1.getElementsByTagName('img')[0];

oDiv.onmouseover=function(){
	oSpan.style.display='block';
	oDiv1.style.display='block';
};
oDiv.onmouseout=function(){
	oSpan.style.display='none';
	oDiv1.style.display='none';
};
oDiv.onmousemove=function(ev){
	var ev=ev||event;
	
	var disX=ev.clientX-oDiv.offsetLeft-oSpan.offsetWidth/2;
	var disY=ev.clientY-oDiv.offsetTop-oSpan.offsetHeight/2;
	
	//限制范围
	//左右
	if(disX<0){
		disX=0;
	}else if(disX>oDiv.clientWidth-oSpan.offsetWidth){
		disX=oDiv.clientWidth-oSpan.offsetWidth;
	}
	//上下
	if(disY<0){
		disY=0;
	}else if(disY>oDiv.clientHeight-oSpan.clientHeight){
		disY=oDiv.clientHeight-oSpan.clientHeight;
	}
	
	oSpan.style.left=disX+'px';
	oSpan.style.top=disY+'px';
	
	//比例
	var scaleX=disX/(oDiv.clientWidth-oSpan.offsetWidth);
	var scaleY=disY/(oDiv.clientHeight-oSpan.clientHeight);
	
	oImg.style.left=-(oImg.offsetWidth-oDiv1.offsetWidth)*scaleX+'px';
	oImg.style.top=-(oImg.offsetHeight-oDiv1.offsetHeight)*scaleY+'px';
}

  

 

原文地址:https://www.cnblogs.com/yangxue72/p/8436108.html