3

ドロップされている要素を条件付きで元に戻したいセットアップがあります

(acceptイベントを使用してみましたが、実際にはあまりにも頻繁に実行されることがわかりました。それだけでなく、その使用により他のイベントがキャンセルされます。)

編集:実際には、実行頻度が高すぎるということではなく、$(this).attr('id')要素の上にカーソルを置いて再訪すると、起動時に正しくなくなります。http://jsfiddle.net/UvByv/1/

上記の例:

  1. ピースをつかみ、さまざまな正方形にカーソルを合わせます。
  2. ホバーしている平方数に注意してください。常に更新されるとは限りません。

正方形の要素に番号が付けられていることがわかります。広場を再訪$(this).attr('id')すると、タイムリーな更新が停止するようです

*私がやろうとしているのは、条件付きで「ドロップ可能性を切り替える」ことであり、要素の上にカーソルを置いている間にDOMを読み取ります。accept私の目的では、残りの DOM と完全には同期していないようです。*

その理由は、私の例でわかるように、特定の時点で駒がどのマスの上にあるかによって、チェスの駒のあるマスであることがわかります。ドロップを許可したくない場合があります。他の時には、私はしたいと思います。

4

1 に答える 1

3

私がこれを正しく理解している場合は、スペースが現在占有されているかどうかだけでなく、現在の移動が有効なチェスの移動であるかどうかに基づいてドロップ可能性を切り替えたいと思います(結局のところ、いくつかの有効なチェスの移動には、別)。これは本当ですか?もしそうなら、私は複雑なaccept関数を使用することが実際には正しい戦略だと思います。

thisこの関数は、ドラッグされる部分(唯一の「el」引数)とドラッグされる可能性のあるスペース(関数の変数)の2つの重要な情報を受け取ります。関数は複数回呼び出されることに注意してください。これは仕様によるものです。jQueryUIソースコードacceptでわかるように、ドラッグ可能なものがドラッグされている場合、関数はボード上のドロップ可能なスペースごとに評価されます。これは、ピースの移動を開始すると、ドロップ可能な各スペースがピースを受け入れることができるかどうかを計算することを意味します。accept

ピースが別の正方形を通過するときにこれを「オンザフライ」で評価したいと思いますが、事前に計算するオーバーヘッドが顕著なパフォーマンスの問題を引き起こしていますか?そうでなければ、私はと行きacceptます。

編集: .appendを使用してピースを正方形から正方形に移動する方法を示すjsFiddleを作成しました:http://jsfiddle.net/58t7L/3/

ケビンによる編集: チャットでマットが問題を階層化して、acceptで$(this)を使用する方法が、acceptの使用目的に正確に適合していないことを示すのに役立ったため、受け入れられました。.over:私が説明して使用していたプロセス用ですが、「accept」はすべてのドロップ可能オブジェクトを一度に評価するため、実際には別のプロセスを要求します。チャットリンクは下のコメントにあります

于 2012-07-27T00:11:37.033 に答える