HTML5 DnDで「ドラッグオーバー」をドラッグしている間、およびドロップ(「ドロップ」)した後、(x、y)座標をどのように決定しますか?
ドラッグオーバーのx、yについて説明しているWebページを見つけました(e.offsetXとe.layerXを見て、さまざまなブラウザーに設定されているかどうかを確認しますが、私の人生では設定されていません)。
Drop(e)関数を使用して、現在のドロップターゲットのどこで実際にドロップされたかを確認しますか?
私はオンライン回路設計アプリを書いていますが、ドロップターゲットが大きいです。
X、yを見つけるためにマウスレベルにドロップダウンする必要がありますか、それともHTML5がより高いレベルの抽象化を提供しましたか?
プロパティclientX
およびclientY
を設定する必要があります(最新のブラウザの場合)。
function drag_over(event) {
console.log(event.clientX);
console.log(event.clientY);
event.preventDefault();
return false;
}
function drop(event) {
console.log(event.clientX);
console.log(event.clientY);
event.preventDefault();
return false;
}
これは(やや)実用的な例です FirefoxとChromeで動作します。
Robertcの回答に基づいて構築し、問題を回避するには:
ClientXとclientYは、ドロップされた要素の左上隅からのカーソルの距離に比例して不正確になります。
dragStart
に記録されたクライアント座標からdragEnd
に記録されたクライアント座標を引くことにより、デルタ距離を簡単に計算できます。ドロップされた要素は、dragEnd
でまったく同じ位置にあることに注意してください。これは、デルタ距離で更新して、新しい左右の位置座標を取得できます。
これが demo in reactですが、プレーンJSでも同じことができます。