原生js写放大镜

主要是练习一下事件以及DOM的高度之类的

鼠标事件以及clientX、offsetX、screenX、pageX、x的区别

  • clientX代表点击位置距离当前body可视区域的宽度
  • offsetX相对于带有定位的父盒子的x和y坐标
  • screeX,代表当前点击位置距离当前电脑屏幕的x、y坐标,电脑屏幕的左上角为(0,0)
  • pageX,当前点击位置距离整个文档的左上角的位置。
    在这里插入图片描述
    放大镜
<div class="box">
   <div class="drag"></div>
</div>
<div class="big"></div>

布局部分

<style>
    *{
        padding:0;
        margin:0;
        
    }
    .box{
        position: relative;
        width: 400px;
        height: 240px;
        background: url('1.jpg');
        background-size: 400px 240px;
    }
    .drag{
        width: 100px;
        height: 80px;
        background: #000000;
        opacity: 0.5;
        border: 1px solid #fff;
        position: absolute;
        left: 0;
        right: 0;
    }
    .big{
        position: fixed;
        left: 600px;
        top: 100px;
        width: 300px;
        height: 240px;
        overflow: hidden;
        border:1px solid #000;
        background:url(1.jpg);
        background-size: 1200px 720px;
        /* background-position: 30px 20px; */
        background-repeat: no-repeat;
        background-position:scale(3)
    }
</style>

逻辑实现

<script>
    var drag=document.querySelector('.drag');
    var box=document.querySelector('.box')
    var big=document.querySelector('.big')
    
    box.onmousedown=function(e){
        let ofx = e.offsetX;//相对于父元素的坐标
        let ofy = e.offsetY;
        // console.log("可视区域",ofx,ofy);
        box.onmousemove=(e)=>{
            let clx=event.clientX;//相对于可视区域的坐标
            let cly=event.clientY;
            // console.log("鼠标",clx,cly);
            let x=clx-ofx;//盒子的左定位
            let y=cly-ofy;
            if(x>=300){//限制一下
                x=300
            }else if(x<=0){
                x=0
            }
            if(y>=160){
                y=160
            }else if (y<=0){
                y=0
            }
            drag.style.left=x+'px';
            drag.style.top=y+'px';
            big.style.backgroundPositionX=-3*x+'px';//因为大图是其三倍,小盒子走一点点,大图就要挪动三倍
            big.style.backgroundPositionY=-3*y+'px';
            
        }
        
    }
    
    
    box.onmouseup=function(){
        box.onmousemove=null;//抬起要去掉移动的事件
    }
    
</script>
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值