放大镜练习

HTML代码

   <div class="box">
      <div class="min-img">
        <img src="img/01.gif" alt="" width="300" height="300">
      </div>
      <p class="touming"></p>
      <div class="max-img">
        <img src="img/01.gif" alt="" width="800" class="datu">
      </div>
   </div>

CSS代码

  *{
            margin: 0px;
            padding: 0px;
        }
        .box{
            width: 300px;
            height: 300px;
            margin: 40px auto;
            border: 1px solid gray;
            position: relative;
        }
        .box>.min-img{
            width: 300px;
            height: 300px;
        }
        
        .box>.touming{
            width: 100px;
            height: 100px;
            background: yellow;
            opacity: .5;
            position: absolute;
            top: 0px;
            left: 0px;
            display: none;
        }
        .box>.max-img{
            width: 500px;
            height: 500px;
            border: 1px solid gray;
            position: absolute;
            top: 400px;
            left: 0px;
            overflow: hidden;
            display: none;
        }
        .box>.max-img>.datu{
            position: absolute;
            top: 0px;
            left: 0px;
        }

JS代码

 function fangdajing(){//封装函数
           let box=document.querySelector(".box");
           let touming=document.querySelector(".box .touming");
           let datu=document.querySelector(".box .max-img .datu");
           let max=document.querySelector(".box .max-img"); 
     // offsetLeft意思是obj相对于版面或offsetParent属性指定的附坐标左侧位置,单位是像素
           let offleft=box.offsetLeft;
		   // offsetLeft意思是obj相对于版面或offsetParent属性指定的附坐标上侧位置,单位是像素
		   let offtop=box.offsetTop;
		   //鼠标移动触发事件,这里是鼠标移动获取鼠标位置的意思,
		   box.onmousemove=function(e){
            //鼠标移动在浏览器的横向位置
			   let x=e.pageX;
               //鼠标移动在浏览器竖向位置
			   let y=e.pageY;
               //鼠标X移动是100px让透明区域在X显示
			   let left=x-offleft - 100;
               //鼠标在Y轴移动100px让透明区域Y显示
			   let top=y-offtop - 100;
               //判断左边最大距离等于200
			   if(left>200){
				   left=200;
			   }
               //左边最小距离等于0
			   if(left<0){
				   left=0;
			   }
               //顶部最大距离等于200
			   if(top>200){
				   top=200;
			   }
               //顶部最小距离等于0
			   if(top<0){
				   top=0;
			   }
			   // 设置touming的位置
			   touming.style.left=left+"px"
			   touming.style.top=top+"px"
			   //获取图片的实际宽度
			   let imgwidth=datu.offsetWidth
               //获取图片的实际高度
			   let imgheight=datu.offsetHeight
			   let imgmaxwidth=imgwidth - 500
			   let imgmaxheight=imgheight - 500
			   // 计算大图片移动的距离x y
			   let imgx=(left*imgmaxwidth) / 200
			   let imgy=(top*imgmaxheight) / 200
			   // 设置图片的决定位置
			   datu.style.left= -imgx+"px"
			   datu.style.top= -imgy+"px"
		   }
           //鼠标移入显示元素
               box.onmouseover=function(){
               touming.style.display="block"
               max.style.display="block"
        }
    //鼠标移出隐藏元素
              box.onmouseout=function(){
               touming.style.display="none"
               max.style.display="none"
         }
    }
              fangdajing()//调用函数

效果图

 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值