You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用JS与JQuery实现图片拖拽功能出现异常该如何解决?

问题原因

正常加载完成的图片被浏览器赋予了默认的原生拖拽行为,拖拽时会触发系统级的图片拖动效果,抢占了自定义mousemove事件的执行逻辑,因此自定义拖拽表现异常。右键拖拽时不会触发浏览器默认的图片拖动行为,所以功能正常。

解决方案
  • 方案1:在mousedown事件中阻止默认行为
    直接在现有的mousedown回调里增加e.preventDefault(),即可禁用浏览器默认的图片拖拽逻辑,修改后的JS代码如下:
let draggable;
let offset;

$(document).on('mousedown', '.piece', e =>{
    draggable = $(e.target);
    offset = {x: e.offsetX, y: e.offsetY};
    e.preventDefault(); // 新增这行,阻止默认行为
}).mousemove(e=>{
    if(draggable){
        draggable.css({top: e.clientY - offset.y, left: e.clientX - offset.x});
    }
}).mouseup(()=>{
    draggable = null;
})
  • 方案2:给图片标签禁用原生拖拽属性,同时增加不可选中样式
    给img标签添加draggable="false"属性,同时修改CSS增加用户不可选中规则,也可以解决问题:
    修改后的CSS代码:
.piece {
    position: absolute;
    top: 10px;
    left: 10px;
    user-select: none; /* 新增,防止拖拽时选中元素内容 */
}

修改后的HTML代码:

<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<div id="p1" ><img class="piece" src="https://i.sstatic.net/UM6k6.png?s=256&g=1" alt="noimage" srcset="" draggable="false"></div>

内容的提问来源于stack exchange,提问作者yih613

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.28 01:06:06