关键词:
【中文标题】setDragImage 不删除 Chrome 上的重影图像?【英文标题】:setDragImage not removing ghost image on Chrome? 【发布时间】:2018-11-12 16:02:43 【问题描述】:我有一个可拖动的元素。我想删除重影图像,因为我会以另一种方式创建它。
但是,谷歌浏览器不允许我使用setDragImage()
阻止重影图像的出现。空白图像是在拖动之前创建的,我在dragstart
事件处理程序中使用setDragImage()
,所以我看不出我做错了什么。重影图像不应出现。
这是一个例子:
const blankCanvas = document.createElement('canvas');
document.querySelector('.item')
.addEventListener('dragstart', (e) =>
e.dataTransfer.setDragImage(blankCanvas, 0, 0);
);
.item
display: inline-block;
width: 5rem;
height: 5rem;
overflow: hidden;
margin: 1rem;
border: 2px solid #fe0000;
cursor: pointer;
.item__img
width: 100%;
height: auto;
<div draggable="true" class="item">
<img src="https://i.stack.imgur.com/drhx7.png" class="item__img">
</div>
在 Chrome 上,如果拖动带有红色边框的框,则会出现重影图像,即使我使用的是setDragImage()
。一切都在 Firefox 上正常运行(而 Edge...甚至没有这个功能)。
我的 Chrome 版本是 66。
【问题讨论】:
【参考方案1】:问题来自图像。如果您尝试拖动红色边框,它将正常工作。只有在可拖动元素内的图像上开始拖动时,才会出现该问题。也许 Chrome 对图像有一些特殊的处理;我不知道。
您可以通过禁用图像上的指针事件来缓解这种情况:
.item img
pointer-events: none;
这是一个工作示例:
const blankCanvas = document.createElement('canvas');
document.querySelector('.item')
.addEventListener('dragstart', (e) =>
e.dataTransfer.setDragImage(blankCanvas, 0, 0);
);
.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;
<div draggable="true" class="item">
<img src="https://i.stack.imgur.com/drhx7.png" class="item__img">
</div>
【讨论】:
您知道如何删除此示例中添加到光标上的地球图标吗?我看到一些建议使用onmousedown="event.preventDefault()"
,但这完全禁用了拖动。
我不确定您所说的“地球图标”是什么意思。您是在谈论不允许光标吗?如果是这样,我认为没有任何简单的方法可以改变它。我相信拖放过程中使用的光标是基于平台的。对于自定义光标,您必须使用 JavaScript 重新实现自己的拖放操作。
那个地球图标很郁闷
@ness-EE 如果您在谈论不允许光标,我认为这意味着您的鼠标不在有效的放置目标上。也许如果您有一个容器是图像周围的有效放置目标,那么光标不会立即变为不允许。但这有点超出了这个问题的范围。
@ness-EE 我遇到了同样的地球图标问题(mac + chrome)。解决方案是画布需要成为 DOM 的一部分。如果我们在 e.dataTransfer.setDragImage(blankCanvas, 0, 0);
这一行之前扩展上面的例子,你会想要这样的东西:document.body.appendChild(blankCanvas);
。这应该删除“404”地球默认图标。 (当然你可以在 dragend 事件中移除 blankCanvas 元素。【参考方案2】:
添加到@ness-EE 提供的解决方案。
这是我使用的解决方案,也处理了将地球隐藏在 chrome 中的情况
public handleDragStart( event : DragEvent ) : void
const blankCanvas: any = document.createElement('canvas');
event.dataTransfer?.setDragImage( blankCanvas, 0, 0);
document.body?.appendChild( blankCanvas);
【讨论】:
React.js - 可拖动元素上的 setDragImage
】React.js-可拖动元素上的setDragImage【英文标题】:React.js-setDragImageondraggableelement【发布时间】:2017-12-1613:23:38【问题描述】:我正在尝试更换浏览器在拖动可拖动元素时使用的默认图像(在本例中为下面的ul)。这是我的代码。... 查看详情
HTML5 拖放事件和 setDragImage 浏览器支持
】HTML5拖放事件和setDragImage浏览器支持【英文标题】:HTML5DragandDropeventsandsetDragImagebrowsersupport【发布时间】:2012-09-2718:45:33【问题描述】:我正在开发一个smalljQueryplugin,它通过原生HTML5拖放事件模拟jQueryUI可拖放/可拖放行为。我... 查看详情
删除 chrome 中 dojo 按钮上的黄色边框
】删除chrome中dojo按钮上的黄色边框【英文标题】:Removeyellowborderondojobuttonsinchrome【发布时间】:2012-08-1522:15:39【问题描述】:如何删除GoogleChrome中显示的按钮上的黄色边框。我试图覆盖样式,但想象一下,如果您必须为每个按... 查看详情
在chrome上删除特定网站的浏览记录
如何从Chrome浏览器中删除指定的浏览记录?很可惜,Chrome尚未提供如此细分的功能,我们似乎只能尝试进入Chrome浏览器的“历史记录”页,找到相关记录并删除,要么就选择将全部历史记录一并删除。那么如何实现删除指定的浏... 查看详情
解决chrome浏览器崩溃,再次安装不上问题
...,发现安装包都打不来很绝望,查了很多资料很多人说要删除注册表的东西但是打开注册表,发现一堆google的东西,手动删根本不现实 在绝望中看到了解决方案:googleUpdate才是安装包打不开的元凶!!!!https://jingyan.baidu.co... 查看详情
如何在 Chrome 上删除 Facebook 视频预览上的下载按钮?
】如何在Chrome上删除Facebook视频预览上的下载按钮?【英文标题】:HowcanIremovethedownloadbuttononfacebookvideopreviewsonChrome?【发布时间】:2017-11-2706:15:15【问题描述】:使用Chrome浏览器,当我在facebook上分享我网站的链接时,“预览”是... 查看详情
如何在chrome自动完成上删除蓝色背景
】如何在chrome自动完成上删除蓝色背景【英文标题】:howtoremovebluebackgroundonchromeautocomplete【发布时间】:2019-08-0313:02:02【问题描述】:我正在制作一个表单并希望每个输入都是透明的,但是当我使用Chrome中的自动完成功能然后Tab... 查看详情
chrome不信任fiddler根证书(代码片段)
...“重置所有证书”。这可能需要一分钟。接受所有提示(删除并重新添加证书)Fiddler4.6.1.4及更早版本单击工具>选项。单击HTTPS选项卡。取消选中DecryptHTTPStraffic复选框。单击“删除拦截证书”按钮。这可能需要一分钟。接受出... 查看详情
如何使用更改和删除事件在 firefox 和 chrome/chromium 上上传和列出目录
】如何使用更改和删除事件在firefox和chrome/chromium上上传和列出目录【英文标题】:Howtouploadandlistdirectoriesatfirefoxandchrome/chromiumusingchangeanddropevents【发布时间】:2017-02-0113:03:04【问题描述】:mozilla和webkit浏览器现在都允许上传目... 查看详情
Chrome 扩展:在加载的 Dom 上注入脚本
...事件中注入了一些脚本,但这会导致丑陋的行为(我正在删除一些元素)。出于这个原因,我想在DOM加载后注入一些脚本,几年前我能够做到这一点,但现在对我来说是不可能的。您知道在当前版本中是否可 查看详情
Chrome 开发工具在灰色背景上显示 CSS 规则。为啥?
...描述】:要明确一点-我不是在谈论属性被“变灰”或被删除;这是正常显示的整个CSS规则,但在灰色背景上。其他应用的规则正常显示,没有灰色背景。有谁知道灰色背 查看详情
如何删除chrome地址栏里面曾经输错的地址
在chrome浏览器的地址栏输入你想删除的网址的部分字幕,比如,在地址栏输入form,然后用键盘上的方向键定位到你想删除的那个错误的地址,如下图所示 然后在键盘上按 shift+del组合键将其删除即可。 查看详情
如何从 PWA 应用主屏幕链接中删除 Chrome 徽标(Android O 预览版)
】如何从PWA应用主屏幕链接中删除Chrome徽标(AndroidO预览版)【英文标题】:HowtoRemoveChromeLogofromPWAAppHomeScreenLink(AndroidOPreview)【发布时间】:2017-10-1900:08:18【问题描述】:我刚刚更新到AndroidOPreview并安装了一些PWA。在主屏幕上,... 查看详情
$.removeCookie 没有在 Chrome 中删除 cookie
】$.removeCookie没有在Chrome中删除cookie【英文标题】:$.removeCookieisnotdeletingcookieinChrome【发布时间】:2016-03-2919:45:45【问题描述】:$.removeCookie不会在Chrome中删除cookie。请参考以下截图附件。屏幕截图取自Chrome设置->所有Cookie和站... 查看详情
CSS 动画在 Chrome 上工作,但在 Safari 上不工作
】CSS动画在Chrome上工作,但在Safari上不工作【英文标题】:CSSAnimationworkingonChromebutnotonSafari【发布时间】:2014-12-0202:59:23【问题描述】:下面的代码在Chrome上运行良好,但在Safari上却不行:@-webkit-keyframesjiggle0%transform:rotate(-.5deg);-... 查看详情
删除 Google Chrome 上的输入焦点
】删除GoogleChrome上的输入焦点【英文标题】:RemoveinputfocusonGoogleChrome【发布时间】:2013-04-0600:29:00【问题描述】:我正在使用Firefox和GoogleChrome。在Firefox上我没有问题,焦点颜色是蓝色。在Chrome上,焦点是蓝色+橙色。如何去除橙... 查看详情
在 Chrome 上转换后 SVG textPath 不可见
】在Chrome上转换后SVGtextPath不可见【英文标题】:SVGtextPathnotvisibleaftertransitiononChrome【发布时间】:2012-07-1909:30:47【问题描述】:我认为这是Chrome中的一个错误,因为它似乎在Firefox中运行良好,但我希望有人可以推荐一个解决方... 查看详情
为啥 Chrome 会删除 localhost:80 的端口号?
】为啥Chrome会删除localhost:80的端口号?【英文标题】:WhydoesChromeremoveportnumberforlocalhost:80?为什么Chrome会删除localhost:80的端口号?【发布时间】:2019-08-2609:26:54【问题描述】:我正在从我的前端React应用程序发出一个请求,并在我... 查看详情