js制作图片放大效果,查看高清图片

8 篇文章 0 订阅

style样式代码

<style type="text/css">
			.box{
				width: 400px;
				height: 500px;
				border: 1px solid salmon;
				margin: 0 auto;
				position: relative;
			}
			.box div:nth-of-type(2){
				width: 200px;
				height: 200px;
				position: absolute;
				top: 0;
				left: 0;
				background: rgba(255,255,255,0.4);
			}
			.box>img{
				width: 100%;
				height: 100%;
				vertical-align: top;
			}
			.fang{
				width: 400px;
				height: 400px;
				position: absolute;
				top: 0;
				right: -403px;
				overflow: hidden;
				border: 1px solid black;
				display: none;
			}
			.fang>img{
				width: 200%;
				height: 200%;
				position: absolute;
			}
		</style>

body内容

<body>
		<div class="box">
			<img src="img/20181217032935545.png" >
			<div class="fang">
				<img src="img/20181217032935545.png" >
			</div>
		</div>
</body>

js代码

<script type="text/javascript">
			var box=document.querySelector('.box')
			var fang=document.querySelector('.fang');
			var Img=document.querySelector('.fang img');
			console.log(Img)
			box.onmouseenter=function(ev){
				fang.style.display='block';
				ev =ev || window.event
				var div=document.createElement('div');//创建一个叫div的元素标签
				box.appendChild(div);//插入创建的标签
				box.addEventListener('mouseleave',function(){//绑定事件
					div.remove();
				})
				var divx=ev.pageX - this.offsetLeft - div.offsetWidth/2;//创建的这个div的x就等于鼠标的坐标减去box的left,再减去创建的div的一半,重新让它的中心点变到左上角
				var divy=ev.pageY - this.offsetTop - div.offsetHeight/2;
				
				var mixL=box.offsetWidth -div.offsetWidth;
				var mixT=box.offsetHeight -div.offsetHeight;
				if(divy>=mixT){
					divy=mixT
				}else if(divy<0){
					divy=0;
				}
				if(divx>=mixL){
					divx=mixL
				}else if(divx<0){
					divx=0;
				}
				div.style.top=divy + 'px';
				div.style.left=divx + 'px';
				box.onmousemove=function(ev){
					ev =ev || window.event;
					var dix=ev.pageX - this.offsetLeft -div.offsetWidth/2;
					var diy=ev.pageY - this.offsetTop - div.offsetHeight/2;
					if(dix>mixL){
						dix=mixL;
					}else if(dix<0){
						dix=0
					}
					if(diy>=mixT){
						diy=mixT
					}else if(diy<0){
						diy=0;
					}
					div.style.top=diy + 'px';
					div.style.left=dix + 'px';
					
					var rl=dix/mixL;
					var tp=diy/mixT;
					
					var Himg=Img.offsetHeight - box.offsetHeight;
					var Wimg=Img.offsetWidth -box.offsetWidth;
					// console.log(Wimg)
					Img.style.top=-tp*Himg +'px';
					Img.style.left=-rl*Wimg +'px';
					// console.log(rl,tp)
				}
			}
			box.onmouseleave=function(){
				fang.style.display='none'
			}
		</script>
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值