1

現在、HTML5のドラッグアンドドロップをコーディングしています。特定の領域で、ドラッグ画像をゴミ箱アイコンとして設定し、マウスをドラッグ可能な領域の上に置いて非特定の画像を表示したいと考えています。イベントが停止し、そのためのロジックが機能していますが、setDragImage()関数がdragstart関数でのみ使用できるようには見えません。これは本当にsetDragImage()を割り当てることができる唯一のイベントですか?スペックを確認しましたが、どちらとも言えないようです。

4

1 に答える 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 に答える