js拖拽div

首先要先明白两个知识点 一个是offsetX 跟 clientX 看个图就明白了。

offsetX是鼠标点击的点到盒字边距的距离 而clientX 是鼠标点击的点到浏览器的距离

用鼠标到浏览器的的距离减去 鼠标到盒字的距离 就能获取到他移动的距离。

 代码如下 里面有详细的注释

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>拖拽</title>
</head>
<style>
    *{
        padding: 0;
        margin: 0;
    }
    .box{
        width: 100px;
        height: 100px;
        border-radius: 10px;
        background-color: rgb(0, 255, 166);
        box-shadow: 0 0 8px 0 #5b5b5b;
        position: absolute;
    }
</style>
<body>
    <div class="box" id="box"></div>
</body>
<script>
    let box = document.getElementById("box");//获取盒字的id
    let falg = false;//开关
    box.addEventListener('mousedown',(e)=>{//dom 二级写法
        falg = true;//当鼠标按下时等于true
        let x =e.offsetX;//获取点击盒子的x坐标-鼠标当前位置的x坐标
        let y = e.offsetY;//获取点击盒子的x坐标-鼠标当前位置的x坐标
        document.onmousemove = (e)=>{//dom 一级写法
            let w = window.innerWidth - box.offsetWidth;//屏幕的宽度减去盒子的宽度
            let h = window.innerHeight - box.offsetHeight;//屏幕的高度减去盒子的高度
            let xx = e.clientX - x;//e.clientX鼠标点击的x坐标到浏览器窗口宽度的距离 然后减去 x
            let yy = e.clientY - y;//e.clientY鼠标点击的Y坐标到浏览器窗口高度的距离 然后减去 y
            //yy = Math.min(Math.max(0,yy),h); 解释:
            //1.Math.min()函数取最小值,Math.max()函数取最大值
            //2.在Math.max()函数中 判断当盒子超出屏幕时 盒子的top值“一定是负数” 所以0就是最大值 返回0 
            //3.在Math.min()函数中 在跟h进行判断 此时h是:屏幕的高度减去盒子的高度=203  所以0是最小的 返回0。这样盒子就不会出去了 xx也是相同道理
            yy = Math.min(Math.max(0,yy),h);
            xx = Math.min(Math.max(0,xx),w);
            if(falg){//falg==true时触发事件
                box.style.left = xx + 'px'; //把xx值 给到盒字
                box.style.top = yy + 'px'; //把xx值 给到盒字
            }
            console.log(yy,xx);//控制台打印
        }
    })
    box.addEventListener('mouseup',()=>{//dom 二级写法
        falg = false;//当鼠标离开时等于false
    })
</script>
</html>

注意:盒字样式里必须加上定位否则 不会移动

如有书写错误请指出感谢!!!

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值