私はドラグラに詳しくないので、質問に直接答えることはできません。しかし、私は jqueryUI のドラッグ ドロップを広範囲に使用しており、これは非常に優れたツールです。そのフレームワークを試してみたいと思うかもしれません。
あなたが例を求めたので、私は私の古いコードのいくつかを掘り下げました。これを見る前に、jqueryUI のドラッグ可能およびドロップ可能チュートリアルに目を通し、背景を説明することをお勧めします。関数の一部を含めました。コードが省略されている場所を示すために、小さなドットを配置しました。<<< の次に重要な行を入れました。クロージャーを使用して、さまざまな部分で参照を利用できるようにする方法に注目してください。閉鎖はすっごく素晴らしいです。私はその死を悪用するので、できれば使い方を学んでください。
ドラッグ オブジェクトを取得したら、それが求められていることに注意してください。後でドラッグ可能オブジェクトを登録するときに、変数を関数に参照する方法に注意してください。
ところで、参照されている停止ドラッグ機能もあることに注意してください。これの定義は示していません。dragObject の宣言を startDrag の外側に移動すると、関数の定義がレジスタ関数の外側に「囲まれている」ため、stopDrag からも参照できます。
function tapeChart_registerDraggables(parentObject,scope) {
if ((parentObject==null)||(parentObject==undefined)) {
parentObject=$jq(document.body);
}
var availablesShow = false;
var savingToServer = false;
var dragClone = null;
var startDrag = function(event, ui) {
tapeChartDraggingReservation = true;
var dragObject = event.target; <<<<<<
if (dragObject.getAttribute("unassigned")=="true") {
var is_chrome = window.chrome;
var is_safari = navigator.userAgent.toLowerCase().indexOf('safari/') > -1;
if (!is_chrome && !is_safari) {
$(ui.helper).css("margin-left", event.clientX - $(dragObject).offset().left);
$(ui.helper).css("margin-top", event.clientY - $(dragObject).offset().top);
}
}
...
// assigned rooms
if (scope!="UNBLOCKED") {
// register items in the grid
$(parentObject).find( ".NODRAGHELPER" ).draggable(
{
snap : "true",
revert : "invalid",
start: startDrag, <<<<
stop: stopDrag
}
)
.click(function(){
if ( $(this).is('.NODRAGHELPER-dragging') ) {
return;
}
// seems that the user can drop and click fast
// prevent this
if (!savingToServer) {
tapeChart_getReservation(this);
}
return false;
});
}
...