HTML5拖放 - setDragImage()可以使用哪些事件?

时间:2012-09-18 06:27:39

标签: javascript html5 drag-and-drop

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

1 个答案:

答案 0 :(得分:7)

这是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方法,它显示它在允许设置图像之前检查readonly。

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事件中更新。