我目前正在编写 HTML5 拖放代码。在某个区域上,我希望将其拖动图像设置为垃圾图标,并且当鼠标悬停在可拖动区域上时以具有非特定图像。我有事件和逻辑为此工作,但似乎 setDragImage() 函数可能仅在 dragstart 函数上可用。这真的是您可以分配 setDragImage() 的唯一事件吗?我已经查看了规范,它似乎并没有说任何一种方式。
问问题
944 次
1 回答
8
这是 Firefox 代码库中的相关部分,它显示 DataTransfer 对象(保存拖动图像)在拖动启动后设置为只读。
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 事件中更新。
于 2012-09-27T05:10:16.097 回答