拖拽效果

如何才能实现一个拖拽效果呢?
在这里插入图片描述
1.给div绑定鼠标按下的事件

2.在按下的事件中,再给div绑定一个鼠标移动的事件

3.移动过程中,获取光标位置,计算出div需要设置的上面的距离和左边的距离

4将上面的距离和左边的距离 给到 div 的top和left

css代码如下:

.box{
    width: 100px;
    height: 100px;
    background-color: red;
    position:absolute;
    left:100px;
    top:0;
}

js代码如下:

var box = document.querySelector(".box");
box.onmousedown=function(ev){
    // 鼠标按下的时候就应该获取到光标的位置,相对元素的
    var ev = ev || window.event;
    var x1 = ev.offsetX;
    var y1 = ev.offsetY;
    // console.log(123);
    document.onmousemove=function(e){
        // console.log(123);
        // 获取光标位置
        var e = e || window.event;
        // 光标在div上的位置是永远不变的
        // var x = e.offsetX;
        // var y = e.offsetY;
        // console.log(x,y);
        // 所以使用offset不行,需要使用client
        var x = e.clientX;
        var y = e.clientY;
        var l = x - x1;
        if(l<=0){
            l=0;
        }
        // 获取窗口可视区域的宽高  window.innerWidth  window.innerHeight - 包含滚动条的
        // 不包含滚动条 document.documentElement.clientWidth  document.documentElement.clientHeight
        // console.log(document.documentElement.clientWidth);
        var maxL = document.documentElement.clientWidth - box.clientWidth;
        if(l>=maxL){
            l = maxL;
        }
        // var b = parseInt(window.getComputedStyle(box)["bottom"]);
        // // console.log(b);
        // if(b<=0){
        //     b=0
        // }
        // console.log(x,x1);
        box.style.left = l + "px"
        var t = y - y1;

        if(t<=0){
            t=0
        }
        var maxT = document.documentElement.clientHeight - box.clientHeight;
        if(t>=maxT){
            t = maxT;
        }
        box.style.top = t + "px"
    }
}

box.onmouseup=function(){
    document.onmousemove=null;
}

在这里插入图片描述

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值