javascript - HTML5 拖放——setDragImage() 有哪些事件可用?

标签 javascript html drag-and-drop

我目前正在编写 HTML5 拖放代码。在某个区域,我希望将其拖动图像设置为垃圾桶图标,并且当鼠标悬停在可拖动区域上时具有非特定图像。我有事件和逻辑工作,但它并不像 setDragImage() 函数可能只在 dragstart 函数上可用。这真的是唯一可以分配 setDragImage() 的事件吗?我已经查看了规范,但它似乎并没有说明任何一种方式。

最佳答案

这是 Firefox 代码库中的相关部分,显示 DataTransfer 对象(保存拖动图像)在 dragstart 之后设置为只读。

https://mxr.mozilla.org/mozilla-central/source/content/events/src/nsEventStateManager.cpp#2141

2138       // now that the dataTransfer has been updated in the dragstart and
2139       // draggesture events, make it read only so that the data doesn't
2140       // change during the drag.
2141       dataTransfer->SetReadOnly();

这里是 setDragImage 方法,显示它在允许设置图像之前检查只读。

https://mxr.mozilla.org/mozilla-central/source/content/events/src/nsDOMDataTransfer.cpp#581

580 NS_IMETHODIMP
581 nsDOMDataTransfer::SetDragImage(nsIDOMElement* aImage, int32_t aX, int32_t aY)
582 {
583   if (mReadOnly)
584     return NS_ERROR_DOM_NO_MODIFICATION_ALLOWED_ERR;
585 
586   if (aImage) {
587     nsCOMPtr<nsIContent> content = do_QueryInterface(aImage);
588     NS_ENSURE_TRUE(content, NS_ERROR_INVALID_ARG);
589   }
590   mDragImage = aImage;
591   mDragImageX = aX;
592   mDragImageY = aY;
593   return NS_OK;
594 }

从上面的代码可以看出,拖动图片只能在Gecko的dragstart事件中更新。

关于javascript - HTML5 拖放——setDragImage() 有哪些事件可用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12471465/

相关文章:

javascript - 如何重置 jQuery UI slider ?

javascript - 为什么我的 fileReader 被包裹在无限循环的 Promise 中?

javascript - 创建无缝音频循环 - Web

html - MathJax 自动换行

javascript - jquery-ui-sortable 的拖动事件

python - 如何判断 qlistview 中的项目被放置在何处?

javascript - IE 11 Script1002 过滤器语法错误

java - 提取 HTML 标记外的文本

javascript - 试图强制不同大小的 block float :left and stick to the top. 。

javascript - 如何制作拖放式HTML文件阅读器