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