javascript - 为什么拖拽会复位??
天蓬老师
天蓬老师 2017-04-10 15:43:33
[JavaScript讨论组]
<p id="box1"></p>

#box1{
    width: 20px;
    height: 20px;
    background: red;
    position: absolute;
}

var box1=document.getElementById('box1');
var disX= 0;
var disY= 0;
var btn=false;
box1.onmousedown= function (e) {
    disX= e.clientX;
    disY= e.clientY;
    btn=true;
}

document.onmousemove= function (e) {
   if(!btn){return;}
    var left= e.clientX-disX;
    var top= e.clientY-disY;
    box1.style.left=left+'px';
    box1.style.top=top+'px';
}
document.onmouseup= function () {
    btn=false;
}

我写的一个拖拽功能,为什么第二次点的时候会复位?
天蓬老师
天蓬老师

欢迎选择我的课程,让我们一起见证您的进步~~

全部回复(3)
伊谢尔伦

当单击时记录鼠标的初始位置。
当移动时,如果在拖拽就更新元素的left与top值。

逻辑是有问题的,正在拖拽的时候left与top的值为什么要减去初始值?
这在元素第一次被拖拽时是没有问题的,因为初始的left和top都是0。
可如果之后再拖拽的话,left与top又会回到0,因为你总是让当前鼠标的x与y坐标减去开始拖拽时候的x与y坐标。
在页面上,自然就是总会回到原处。

修改也很简单,你只要不减去初始的值就行了。

ringa_lee

你在第一次触发 onmouseup 的时候将 onmouseup onmousemove 事件都已经
觉得应该是这个原因吧


document.onmousemove= function (e) {
   if(!btn){return;}
    var left= e.clientX;
    var top= e.clientY;
    box1.style.left=left+'px';
    box1.style.top=top+'px';
}
ringa_lee
    <p id="box1"></p>
    #box1{
        width: 20px;
        height: 20px;
        background: red;
        position: absolute;
    }
    
    var box1=document.getElementById('box1');
    var disX= 0;
    var disY= 0;
    var btn=false;
    box1.onmousedown= function (e) {
        disX= e.clientX;
        disY= e.clientY;
        btn=true;
    }
    
    document.onmousemove= function (e) {
       if(!btn){return;}
        var left= e.clientX;
        var top= e.clientY
        box1.style.left=left+'px';
        box1.style.top=top+'px';
    }
    document.onmouseup= function () {
        btn=false;
    }
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送
PHP中文网APP
随时随地碎片化学习
PHP中文网抖音号
发现有趣的

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号