js实现放大镜效果

html

	<div id="big">
		<img src="./imgs/2.jpg" width="100%" alt="">
		<div id="small"></div>
	</div>
	<div id="list">
		<ul>
			<li><img src="./imgs/2.jpg" alt=""></li>
			<li><img src="./imgs/3.jpg" alt=""></li>
			<li><img src="./imgs/4.jpg" alt=""></li>
			<li><img src="./imgs/5.jpg" alt=""></li>
		</ul>
	</div>
	<div id="show">
		<img id="bigPic" src="./imgs/2.jpg" alt="">
	</div>

css

	<style>
		*{
			margin:0px;  
			padding:0px;
		}
		li{
			list-style:none;
		}
		#big{
			width:400px;
			height:400px;
			margin-top:70px;
			margin-left:100px;
			position:relative;
			border:1px solid #ccc;
		}

		#small{
			width:160px;
			height:160px;
			background:yellow;
			opacity:0.4;
			position:absolute;
			top:0px;
			left:0px;
			display:none;
		}
		#show{
			width:400px;
			height:400px;
			position:absolute;
			top:70px;
			left:521px;
			overflow:hidden;
			display:none;
			border:1px solid #ccc;
		}

		#show img{
			position:absolute;
			left:-500px;
		}

		/* 设置图片列表 */
		#list{
			width:400px;
			height:100px;
			margin-top:5px;
			margin-left:100px;
			border:1px solid #ccc;
		}
		#list ul{
			/*width:100%;*/
			/*height:100%;*/
		}
		#list li{
			height:100px;
			float:left;
		}
		#list li img{
			height:100%;
		}
	</style>

js

<script>
		// 获取元素
		var small = document.getElementById('small');	// 小方块
		var big = document.getElementById('big');		// 大方块
		var show = document.getElementById('show');		// 右侧展示的大方块
		var bigPic = document.getElementById('bigPic');	// 大图
		var list = document.getElementById('list');		// 图片列表

		// 获取big元素的left和top值
		var bL = big.offsetLeft;
		var bT = big.offsetTop;

		// 获取big元素的宽度和高度
		var bW = big.offsetWidth;
		var bH = big.offsetHeight;

		// 右侧图片的宽度与高度
		var imgW = 0;
		var imgH = 0;
		// console.log(imgH);

		// 小球的宽度与高度
		var sW = 0;
		var sH = 0;

		// console.log(bL);
		// console.log(bT);

		// 设置鼠标移入事件
		big.onmouseover = function(){
			// 设置small显示
			small.style.display = 'block';
			// 设置show显示
			show.style.display = 'block';

			// 获取small元素的宽度/高度
			sW = small.offsetWidth;
			sH = small.offsetHeight;

			// 获取右侧图片的大小
			imgW = bigPic.offsetWidth;
			imgH = bigPic.offsetHeight;
		}

		// 设置鼠标移出事件
		big.onmouseout = function(){
			// 设置small隐藏
			small.style.display = 'none';
			// 设置show隐藏
			show.style.display = 'none';
		}

		// 设置small的移动
		big.onmousemove = function(e){
			

			// 获取当前鼠标的移动坐标 --- 获取的是鼠标距离当前可视区域顶部的距离
			// var x = e.clientX;
			var y = e.clientY;
			// console.log(y);

			// 获取鼠标距离文档顶部和文档左侧的距离
			var x = e.pageX;
			var y = e.pageY;
			// console.log(y);

			// console.log(x+':'+y);
			// console.log(y);

			// 计算small元素最终的left和top的值
			// left = 鼠标点的x位置 - big的left值 - small的宽度/2
			var l = x - bL - sW/2;

			// top = 鼠标点的y坐标 - big的top的值 - small元素的高度/2
			var t = y - bT - sH/2;

			// 判断small元素的位置
			// 水平方向的临界点 --- big的宽度 - small的宽度
			var maxL = bW - sW -2;	// 右侧临界点 // 2 两个元素的边框
			if(l>=maxL){
				l = maxL;
			}

			// 左侧的临界点
			if(l<=0){
				l = 0;
			}

			// 顶部的临界点
			if(t<=0){
				t = 0;
			}

			// 底部的临界点
			var maxT = bH - sH - 2;	// 2 两个元素的边框
			if(t>=maxT){
				t = maxT;
			}

			// 设置left和top的值
			small.style.left = l+'px';
			small.style.top = t+'px';

			// 右侧的大图的设置 -- 计算大图的偏移值
			// bigL / 1000 = l/400
			var bigL = -imgW/bW*l;
			var bigT = -imgH/bH*t;
			// imgW = bigPic.offsetWidth;
			// imgH = bigPic.offsetHeight;

			// 设置图片的left和top的值
			bigPic.style.left = bigL+'px';
			bigPic.style.top = bigT+'px';
		}

		// 获取图片列表下的所有的li
		var imgList = list.children[0].children;
		// console.log(imgList);

		// 获取图片个数
		var len = imgList.length;
		// 设置所有li的单击事件
		for(var i=0;i<len;i++){
			imgList[i].onclick = function(){
				// 拿到当前图片的地址
				// console.log(this.children[0].src);

				// 赋值给big里面的img元素
				big.children[0].src = this.children[0].src;

				// 赋值给show里面的img
				bigPic.src = this.children[0].src;
			}
		}
	</script>

放大镜完整代码

<!doctype html>
<html lang="en">
<head>
	<meta charset="UTF-8">
	<title>我是放大镜</title>
	<style>
		*{
			margin:0px;  
			padding:0px;
		}
		li{
			list-style:none;
		}
		#big{
			width:400px;
			height:400px;
			margin-top:70px;
			margin-left:100px;
			position:relative;
			border:1px solid #ccc;
		}

		#small{
			width:160px;
			height:160px;
			background:yellow;
			opacity:0.4;
			position:absolute;
			top:0px;
			left:0px;
			display:none;
		}
		#show{
			width:400px;
			height:400px;
			position:absolute;
			top:70px;
			left:521px;
			overflow:hidden;
			display:none;
			border:1px solid #ccc;
		}

		#show img{
			position:absolute;
			left:-500px;
		}

		/* 设置图片列表 */
		#list{
			width:400px;
			height:100px;
			margin-top:5px;
			margin-left:100px;
			border:1px solid #ccc;
		}
		#list ul{
			/*width:100%;*/
			/*height:100%;*/
		}
		#list li{
			height:100px;
			float:left;
		}
		#list li img{
			height:100%;
		}
	</style>
</head>
<body>
	<div id="big">
		<img src="./imgs/2.jpg" width="100%" alt="">
		<div id="small"></div>
	</div>
	<div id="list">
		<ul>
			<li><img src="./imgs/2.jpg" alt=""></li>
			<li><img src="./imgs/3.jpg" alt=""></li>
			<li><img src="./imgs/4.jpg" alt=""></li>
			<li><img src="./imgs/5.jpg" alt=""></li>
		</ul>
	</div>
	<div id="show">
		<img id="bigPic" src="./imgs/2.jpg" alt="">
	</div>

	<script>
		// 获取元素
		var small = document.getElementById('small');	// 小方块
		var big = document.getElementById('big');		// 大方块
		var show = document.getElementById('show');		// 右侧展示的大方块
		var bigPic = document.getElementById('bigPic');	// 大图
		var list = document.getElementById('list');		// 图片列表

		// 获取big元素的left和top值
		var bL = big.offsetLeft;
		var bT = big.offsetTop;

		// 获取big元素的宽度和高度
		var bW = big.offsetWidth;
		var bH = big.offsetHeight;

		// 右侧图片的宽度与高度
		var imgW = 0;
		var imgH = 0;
		// console.log(imgH);

		// 小球的宽度与高度
		var sW = 0;
		var sH = 0;

		// console.log(bL);
		// console.log(bT);

		// 设置鼠标移入事件
		big.onmouseover = function(){
			// 设置small显示
			small.style.display = 'block';
			// 设置show显示
			show.style.display = 'block';

			// 获取small元素的宽度/高度
			sW = small.offsetWidth;
			sH = small.offsetHeight;

			// 获取右侧图片的大小
			imgW = bigPic.offsetWidth;
			imgH = bigPic.offsetHeight;
		}

		// 设置鼠标移出事件
		big.onmouseout = function(){
			// 设置small隐藏
			small.style.display = 'none';
			// 设置show隐藏
			show.style.display = 'none';
		}

		// 设置small的移动
		big.onmousemove = function(e){
			

			// 获取当前鼠标的移动坐标 --- 获取的是鼠标距离当前可视区域顶部的距离
			// var x = e.clientX;
			var y = e.clientY;
			// console.log(y);

			// 获取鼠标距离文档顶部和文档左侧的距离
			var x = e.pageX;
			var y = e.pageY;
			// console.log(y);

			// console.log(x+':'+y);
			// console.log(y);

			// 计算small元素最终的left和top的值
			// left = 鼠标点的x位置 - big的left值 - small的宽度/2
			var l = x - bL - sW/2;

			// top = 鼠标点的y坐标 - big的top的值 - small元素的高度/2
			var t = y - bT - sH/2;

			// 判断small元素的位置
			// 水平方向的临界点 --- big的宽度 - small的宽度
			var maxL = bW - sW -2;	// 右侧临界点 // 2 两个元素的边框
			if(l>=maxL){
				l = maxL;
			}

			// 左侧的临界点
			if(l<=0){
				l = 0;
			}

			// 顶部的临界点
			if(t<=0){
				t = 0;
			}

			// 底部的临界点
			var maxT = bH - sH - 2;	// 2 两个元素的边框
			if(t>=maxT){
				t = maxT;
			}

			// 设置left和top的值
			small.style.left = l+'px';
			small.style.top = t+'px';

			// 右侧的大图的设置 -- 计算大图的偏移值
			// bigL / 1000 = l/400
			var bigL = -imgW/bW*l;
			var bigT = -imgH/bH*t;
			// imgW = bigPic.offsetWidth;
			// imgH = bigPic.offsetHeight;

			// 设置图片的left和top的值
			bigPic.style.left = bigL+'px';
			bigPic.style.top = bigT+'px';
		}

		// 获取图片列表下的所有的li
		var imgList = list.children[0].children;
		// console.log(imgList);

		// 获取图片个数
		var len = imgList.length;
		// 设置所有li的单击事件
		for(var i=0;i<len;i++){
			imgList[i].onclick = function(){
				// 拿到当前图片的地址
				// console.log(this.children[0].src);

				// 赋值给big里面的img元素
				big.children[0].src = this.children[0].src;

				// 赋值给show里面的img
				bigPic.src = this.children[0].src;
			}
		}
	</script>
</body>
</html>
  • 2
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值