电商网站商品图片放大镜实现

提供两种实现方式。

① margin-left、margin-top方式实现。

②clip方式实现。

事件统一使用委托机制,即冒泡原理。

2146cf1bddc63abd004f5941ebf2472359c.jpg

方式一 外边距实现

请记得将图片放进去

<!DOCTYPE HTML>
<html>
	<head>
	<style>
		#outerdiv{
			height:220px;
			width:460px;
			margin:20px auto;
		 }
		.imgcontainer{
			width:200px;
			height:200px;
			display:inline-block;
			position:relative;
			
		}
		 
		#rightdiv{
			overflow:hidden;
			margin-left:30px;
			display:none;
		}
		 
		#overlayout{
			width:100px;
			height:100px;
			background-color:#3958dd8c;
			left:0px;
			top:0px;
			position:absolute;
			display:none;
		    
		}
		#movediv{
		  width:100%;
		  height:100%;
		  position:absolute;
		  left:0px;
		  top:0px;
		  cursor: move;
		}
		body{
			margin:0 auto;
		}
	</style>
	</head>
	<body>
<div id="outerdiv"   >
	<div id="leftdiv" class="imgcontainer" >
		<img id="srcimg"
		src="src.png" width="100%" height="100%"/>
		 <div id="overlayout"  ></div>
		 <div id="movediv" onmouseenter="showHideImg(true)"
		onmouseleave="showHideImg(false)"
		onmousemove="expandImg(event)"></div>	
	</div>
	<div id="rightdiv" class="imgcontainer">
		<img id="expand_img" src="src.png" width="200%" height="200%"/>
	</div>
</div>	
		
<script >
  var target_img = document.getElementById("expand_img");
 function expandImg(e){
	var x = e.offsetX,y = e.offsetY;
	if(x<=50){
		x=0;
	}else if(x<=150){
		x=x-50;
	}else{
		x=100;
	}
	if(y<=50){
		y=0;
	}else if(y<=150){
		y=y-50;
	}else{
		y=100;
	}
	overlayout.style.left=x+"px";	
	overlayout.style.top=y+"px";
	 
	target_img.style.marginLeft= -1*x*2 +"px";
	target_img.style.marginTop= -1*y*2 +"px";
}

function showHideImg(flag){
	if(flag){//展示 right-div.
		document.getElementById("rightdiv").style.display="inline-block";
		overlayout.style.display="block";
	}else{//隐藏 right-div.
		document.getElementById("rightdiv").style.display="none";
		overlayout.style.display="none";
	}
	
}
</script>
	</body>
</html>

方式二 clip实现

请记得将图片放进去

<!DOCTYPE HTML>
<html>
	<head>
	<style>
		#outerdiv{
			height:220px;
			width:460px;
			margin:20px auto;
		 }
		.imgcontainer{
			width:200px;
			height:200px;
			display:inline-block;
			position:relative;
			
		}
		 
		#rightdiv{
			overflow:hidden;
			margin-left:30px;
			display:none;
		}
		 
		#overlayout{
			width:100px;
			height:100px;
			background-color:#3958dd8c;
			left:0px;
			top:0px;
			position:absolute;
			display:none;
		    
		}
		#movediv{
		  width:100%;
		  height:100%;
		  position:absolute;
		  left:0px;
		  top:0px;
		  cursor: move;
		}
		body{
			margin:0 auto;
		}
		
		#expand_img{
			position:absolute;
			left:0px;
			top:0px;
		}
		
	</style>
	</head>
	<body>
<div id="outerdiv"   >
	<center>原图强制400*400</center>
	<img   src="src.png" width="400px" height="400px"  /><br/>
	 
	<div id="leftdiv" class="imgcontainer" >
		<img id="srcimg"
		src="src.png" width="100%" height="100%"/>
		 <div id="overlayout"  ></div>
		 <div id="movediv" onmouseenter="showHideImg(true)"
		onmouseleave="showHideImg(false)"
		onmousemove="expandImg(event)"></div>	
	</div>
	<div id="rightdiv" class="imgcontainer">
		<img id="expand_img" src="src.png" width="400px" height="400px"  />
	</div>
</div>	

		
<script >
  var target_img = document.getElementById("expand_img");
 function expandImg(e){
	var x = e.offsetX,y = e.offsetY;
	if(x<=50){
		x=0;
	}else if(x<=150){
		x=x-50;
	}else{
		x=100;
	}
	if(y<=50){
		y=0;
	}else if(y<=150){
		y=y-50;
	}else{
		y=100;
	}
	overlayout.style.left=x+"px";	
	overlayout.style.top=y+"px";
	
	console.info(x+" "+y);
	var b = 2;
	var top = b*y;
	var left = b*x;
	var right = left + 100*b;
	var bottom = top + 100*b;
	
	target_img.style.clip="rect("+top+"px "+ right+"px "+ bottom+"px "+left+"px)";
	target_img.style.left=-left+"px";
	target_img.style.top=-top+"px";

}

function showHideImg(flag){
	if(flag){//展示 right-div.
		document.getElementById("rightdiv").style.display="inline-block";
		overlayout.style.display="block";
	}else{//隐藏 right-div.
		document.getElementById("rightdiv").style.display="none";
		overlayout.style.display="none";
	}
	
}
</script>
	</body>
</html>

 

转载于:https://my.oschina.net/lightled/blog/1925302

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值