jquery 如何删除拖动(鬼)图像?

guz6ccqo  于 2023-06-22  发布在  jQuery
关注(0)|答案(7)|浏览(148)

如何删除拖动图像时的重影。我们已经尝试了代码,它在Firefox和Chrome中工作,但在Safari中不工作。请任何一个帮助我的代码的错误是什么。https://jsfiddle.net/rajamsr/Lfuq5qb6/

document.addEventListener("dragstart", function( event ) {
      dragged = event.target;
      event.dataTransfer.setDragImage(dragged, 11111110, 10);
}, false);
ylamdve6

ylamdve61#

您可以通过显示空/透明图像来防止显示重影预览:

document.addEventListener("dragstart", function( event ) {
    var img = new Image();
    img.src = 'data:image/gif;base64,R0lGODlhAQABAIAAAAUEBAAAACwAAAAAAQABAAACAkQBADs=';
    event.dataTransfer.setDragImage(img, 0, 0);
}, false);
j2qf4p5b

j2qf4p5b2#

不要使用event.target作为setDragImage的参数,这可能会导致内存问题。
您可以随时添加自定义图像,该图像也可以是透明PNG。
下面是一个例子。

var dragMe = document.getElementById("drag-me"),
    img = new Image();

img.onload = function () {

  dragMe.addEventListener("dragstart", function(e) {

    e.dataTransfer.setDragImage(img, 0, 0);

  }, false);

}

img.src = "http://placehold.it/150/000000/ffffff?text=GHOST";
#drag-me {
  width: 100px;
  height: 100px;
  background-color: black;
  line-height: 100px;
  text-align: center;
}

#drag-me > img {
  vertical-align: middle;
}
<div id="drag-me">
  <img src="https://jsfiddle.net/img/logo.png" draggable="true" />
</div>

另一种选择是克隆节点元素并将其visibility设置为hidden。但要使此选项起作用,必须将克隆的元素添加到DOM中。
克隆节点的示例如下所示。我没有完全隐藏节点,所以你可以看到发生了什么。

var dragMe = document.getElementById("drag-me");

dragMe.addEventListener("dragstart", function(e) {

    var clone = this.cloneNode(true);
    clone.style.opacity = 0.1;               // use opacity or
    //clone.style.visibility = "hidden";     // visibility or
    //clone.style.display = "none";          // display rule
    document.body.appendChild(clone);
    e.dataTransfer.setDragImage(clone, 0, 0);
    
}, false);
#drag-me {
  width: 100px;
  height: 100px;
  background-color: black;
  line-height: 100px;
  text-align: center;
}

#drag-me > img {
  vertical-align: middle;
}
<div id="drag-me">
  <img src="https://jsfiddle.net/img/logo.png" draggable="true" />
</div>
hmmo2u0o

hmmo2u0o3#

您可以只使用event.target并使用窗口的outerWidthouterHeight来定位它

document.addEventListener("dragstart", function( event ) {
  event.dataTransfer.setDragImage(event.target, window.outerWidth, window.outerHeight);
}, false);
oyjwcjzk

oyjwcjzk4#

JSfiddle不再打开,所以我不理解上下文,但在Chrome中对我有效

const canvas = document.createElement('canvas');
event.dataTransfer.setDragImage(canvas, 0, 0);
canvas.remove();
niknxzdl

niknxzdl5#

您的代码导致内存问题。
相反,使用css来停止用户拖动/选择,这在大多数浏览器中都可以工作,但在firefox中似乎有一个bug,它不起作用,因此将ondragstart="return false;"添加到img标签中以修复此问题请参阅https://jsfiddle.net/Lfuq5qb6/1/

<img class="normal-logo hidden-xs" src="..." alt="logo" ondragstart="return false;"/> 

img{
    user-drag: none; 
    user-select: none;
    -moz-user-select: none;
    -webkit-user-drag: none;
    -webkit-user-select: none;
    -ms-user-select: none;
}
ibrsph3r

ibrsph3r6#

function removeGhosting(event) {
    if(!(event instanceof MouseEvent)) {
        console.info("Parameters must be of type MouseEvent!")
        return;
    }
    let dragIcon = document.createElement('img');
    dragIcon.src = 'data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7',
    dragIcon.width = 0;
    dragIcon.height = 0;
    dragIcon.opacity = 0;
    if(event.dataTransfer) {
        event.dataTransfer.setDragImage(dragIcon,0, 0);
    }
}

enter link description here

kyvafyod

kyvafyod7#

您可以将img draggable属性设置为false。

<img id="" src="..." draggable="false">

要禁用对图像的选择,可以使用

<style>

img{
    user-drag: none; 
    user-select: none;
    -moz-user-select: none;
    -webkit-user-drag: none;
    -webkit-user-select: none;
    -ms-user-select: none;
 } 

</style>

相关问题