首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >setDragImage不删除Chrome上的重影图像?

setDragImage不删除Chrome上的重影图像?
EN

Stack Overflow用户
提问于 2018-06-03 06:14:57
回答 2查看 2.6K关注 0票数 1

我有一个可拖动的元素。我想删除鬼影图像,因为我将以另一种方式创建它。

然而,Google Chrome不允许我使用setDragImage()来阻止鬼影图像的出现。空白图像是在拖动之前创建的,并且我在dragstart事件处理程序中使用了setDragImage(),所以我看不出我做错了什么。不应出现重影图像。

下面是一个例子:

代码语言:javascript
运行
复制
const blankCanvas = document.createElement('canvas');

document.querySelector('.item')
  .addEventListener('dragstart', (e) => {
    e.dataTransfer.setDragImage(blankCanvas, 0, 0);
  });
代码语言:javascript
运行
复制
.item {
  display: inline-block;
  width: 5rem;
  height: 5rem;
  overflow: hidden;
  margin: 1rem;
  border: 2px solid #fe0000;
  cursor: pointer;
}

.item__img {
  width: 100%;
  height: auto;
}
代码语言:javascript
运行
复制
<div draggable="true" class="item">
  <img src="https://i.stack.imgur.com/drhx7.png" alt="" class="item__img">
</div>

在Chrome上,如果你拖动带有红色边框的方框,即使我使用的是setDragImage(),鬼影图像也会出现。一切都能在Firefox上正常工作(以及Edge...甚至没有这个功能)。

我的Chrome版本是66。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2018-06-03 06:14:57

问题出在图像上。如果您尝试拖动红色边框,它将正常工作。只有当在可拖动元素内的图像上开始拖动时,问题才会出现。也许Chrome对图片有一些特殊的处理;我不知道。

您可以通过禁用图像上的指针事件来缓解此问题:

代码语言:javascript
运行
复制
.item img {
  pointer-events: none;
}

下面是一个有效的示例:

代码语言:javascript
运行
复制
const blankCanvas = document.createElement('canvas');

document.querySelector('.item')
  .addEventListener('dragstart', (e) => {
    e.dataTransfer.setDragImage(blankCanvas, 0, 0);
  });
代码语言:javascript
运行
复制
.item {
  display: inline-block;
  width: 5rem;
  height: 5rem;
  overflow: hidden;
  margin: 1rem;
  border: 2px solid #fe0000;
  cursor: pointer;
}

.item__img {
  width: 100%;
  height: auto;
  
  /* The fix */
  pointer-events: none;
}
代码语言:javascript
运行
复制
<div draggable="true" class="item">
  <img src="https://i.stack.imgur.com/drhx7.png" alt="" class="item__img">
</div>

票数 2
EN

Stack Overflow用户

发布于 2022-02-01 22:14:22

添加到@ness-EE提供的解决方案中。

这是我使用的解决方案,还可以处理在chrome中隐藏地球的情况。

代码语言:javascript
运行
复制
public handleDragStart( event : DragEvent ) : void {
    const blankCanvas: any = document.createElement('canvas');
    event.dataTransfer?.setDragImage( blankCanvas, 0, 0);
    document.body?.appendChild( blankCanvas);
}
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/50661599

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档