js 基础 ---实现放大镜的效果

js 基础 ---实现放大镜的效果
能利用原生的js是非常重要的,所以对于仿照电商的商品放大图做出了这个放大镜
的效果。在这个例子中,放大镜跟随着鼠标的移动而移动,大盒的图片移动方向与小盒子图片的移动方向是相反的,它们的放缩比例是相同的,具体的实现案例如下:

第一种方法:

<!DOCTYPE html>
	<html>
	<head>
		<title>放大镜效果</title>
		<meta charset="utf-8">
		<style type="text/css">
		body{position: relative;}
		*{margin: 0;padding:0;}
		#Box{
			height:300px; 
			width:300px;
			position: relative;
			border:1px solid gray;
		}
		#bigBox{
			height:300px; 
			width:300px;
			position: absolute;
			top:0;
			left:310px;
			overflow: hidden;
			display:none;
			border: 1px solid gray;
		}
		#Box img{
			height:300px; 
			width:300px;
			}
		#lay{
			background:#fff;
			border:1px solid gray;
			position: absolute;
			top:0;
			left: 0;
			opacity:0.5;
			display:none;
			filter:alpha(opacity=50);
		}
		</style>
		<script type="text/javascript">
			window.onload = function(){
				var Box = document.getElementById("Box");
				var bigBox = document.getElementById("bigBox");
				var bigbox = getChildNodes(bigBox)[0];
				var lay = document.getElementById("lay");
				//鼠标移入时,将放大镜和bigBox显示出来
				Box.onmouseover = function(){
					lay.style.display = "block";
					bigBox.style.display = "block";
				}
				//鼠标移出时,将放大镜和bigBox隐藏起来
				Box.onmouseout = function(){
					lay.style.display = "none";
					bigBox.style.display = "none";
				}
				Box.onmousemove = function(e){
					e = e || event;//事件源的兼容问题
					var scale = 4;//图片的放缩比例
					//将鼠标放到放大镜的中间
					var x = e.clientX - lay.offsetWidth/2;
					var y = e.clientY - lay.offsetHeight/2;
					//将放大镜的宽高与盒子的宽高结合起来按比例放缩
					lay.style.width = parseInt(Box.offsetWidth / scale )+ "px";
					lay.style.height = parseInt(Box.offsetHeight / scale)+ "px";
					//设置大盒子的宽高
					bigbox.style.width = Box.offsetWidth * scale + "px";
					bigbox.style.height = Box.offsetHeight * scale + "px";
					if(x < 0){
						x = 0;//左边界的判断,当超出时将x置为0;
					}
					//右边界的判断,当超出时将x置为Box的宽度减去放大镜的宽度;
					if( x >= Box.offsetWidth - lay.offsetWidth){
						x = Box.offsetWidth - lay.offsetWidth;
					}
					//下边界的判断,当超出时将y置为Box的高度减去放大镜的高度;
					if( y >= Box.offsetHeight - lay.offsetHeight){
						y = Box.offsetHeight - lay.offsetHeight;
					}
					if(y < 0){
						y = 0;//上边界的判断,当超出时将y置为0;
					}
					lay.style.left = x + "px";
					lay.style.top = y + "px";
					//同比例放缩,大的盒子图片的放缩比例,当小盒子向右移动的时候,大盒子向左移动同等的比例的宽高,方向是相反的
					 var left = lay.offsetLeft * scale;
					 var top  = lay.offsetTop * scale ;
					bigbox.style.marginLeft =(left * (-1)) + "px";
					bigbox.style.marginTop =(top * (-1))+ "px";

					
				}
				
			}
			//获取孩子的节点
			function getChildNodes(element){
 				var arr = [];
	 			var eList = element.childNodes;
	 			for(var i = 0;i < eList.length;i++){
	 				if(eList[i].nodeType == 1){//过滤空白节点
	 					arr.push(eList[i]); 
	 				}
	 		     } 
	 		     return arr;
	 	    }
		</script>
		
	</head>
	<body>
		<div id="Box">
			<img  src="1.jpg"/>
			<span id="lay"></span>
		</div>
		<div id="bigBox">
			<img  src="1.jpg" />
		</div>
	</body>
	</html>	
第二种方法是:运用children属性获取孩子
<!DOCTYPE html>
	<html>
	<head>
		<title>放大镜效果</title>
		<meta charset="utf-8">
		<style type="text/css">
		body{position: relative;}
		*{margin: 0;padding:0;}
		#Box{
			height:300px; 
			width:300px;
			position: relative;
			border:1px solid gray;
		}
		#bigBox{
			height:300px; 
			width:300px;
			position: absolute;
			top:0;
			left:310px;
			overflow: hidden;
			display:none;
			border: 1px solid gray;
		}
		#Box img{
			height:300px; 
			width:300px;
			}
		#lay{
			background:#fff;
			border:1px solid gray;
			position: absolute;
			top:0;
			left: 0;
			opacity:0.5;
			display:none;
			filter:alpha(opacity=50);
		}
		</style>
		<script type="text/javascript">
			window.onload = function(){
				var Box = document.getElementById("Box");
				var bigBox = document.getElementById("bigBox");
				var bigbox = bigBox.children[0];
				var lay = document.getElementById("lay");
				//鼠标移入时,将放大镜和bigBox显示出来
				Box.onmouseover = function(){
					lay.style.display = "block";
					bigBox.style.display = "block";
				}
				//鼠标移出时,将放大镜和bigBox隐藏起来
				Box.onmouseout = function(){
					lay.style.display = "none";
					bigBox.style.display = "none";
				}
				Box.onmousemove = function(e){
					e = e || event;//事件源的兼容问题
					var scale = 4;//图片的放缩比例
					//将鼠标放到放大镜的中间
					var x = e.clientX - lay.offsetWidth/2;
					var y = e.clientY - lay.offsetHeight/2;
					//将放大镜的宽高与盒子的宽高结合起来按比例放缩
					lay.style.width = parseInt(Box.offsetWidth / scale )+ "px";
					lay.style.height = parseInt(Box.offsetHeight / scale)+ "px";
					//设置大盒子的宽高
					bigbox.style.width = Box.offsetWidth * scale + "px";
					bigbox.style.height = Box.offsetHeight * scale + "px";
					if(x < 0){
						x = 0;//左边界的判断,当超出时将x置为0;
					}
					//右边界的判断,当超出时将x置为Box的宽度减去放大镜的宽度;
					if( x >= Box.offsetWidth - lay.offsetWidth){
						x = Box.offsetWidth - lay.offsetWidth;
					}
					//下边界的判断,当超出时将y置为Box的高度减去放大镜的高度;
					if( y >= Box.offsetHeight - lay.offsetHeight){
						y = Box.offsetHeight - lay.offsetHeight;
					}
					if(y < 0){
						y = 0;//上边界的判断,当超出时将y置为0;
					}
					lay.style.left = x + "px";
					lay.style.top = y + "px";
					//同比例放缩,大的盒子图片的放缩比例,当小盒子向右移动的时候,大盒子向左移动同等的比例的宽高,方向是相反的
					 var left = lay.offsetLeft * scale;
					 var top  = lay.offsetTop * scale ;
					bigbox.style.marginLeft =(left * (-1)) + "px";
					bigbox.style.marginTop =(top * (-1))+ "px";

					
				}
				
			}
			
		</script>
		
	</head>
	<body>
		<div id="Box">
			<img  src="1.jpg"/>
			<span id="lay"></span>
		</div>
		<div id="bigBox">
			<img  src="1.jpg" />
		</div>
	</body>
	</html>	





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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值