すべてドラッグおよびドロップ可能なタスクのリストがあります。それらすべてには、別のタスクがそれらの上にホバリングしているときにそれらが点灯することを確認するための「over」イベントハンドラーがあります。
これは私が望むように完全には機能していません。1つのタスクのドラッグを開始すると、マウスが実際にドラッグ可能なヘルパーの上にない場合を除いて、他のタスクが期待どおりに点灯しません(これは、カーソルを移動できるようにaxis ='y'を指定したために可能です)。ドラッグセッションを中断せずにヘルパーの左右)。
ドラッグしているタスクもドロップ可能であることが問題だと思ったので、ドラッグしたらドロップ可能性を無効にする必要があることを指定しました。
では、なぜドロップ可能なターゲット上にドラッグ可能なヘルパーがあるとオーバーイベントがトリガーされないのに、ドロップ可能なターゲット上にカーソルがあるとそのイベントがトリガーされるのでしょうか。
コードは次のとおりです。
$(mySubtasks).each(function(){
var _this = this;
$(_this).draggable({
axis: 'y',
containment: '#plannerTab',
disabled: true,
revert: 'invalid',
start: function(e, ui){
currentlyDragging = true;
$(_this).droppable('disable');
$('#messageArea').text('Currently dragging');
$(_this).css('position', 'absolute');
},
stop: function(e, ui){
currentlyDragging = false;
returnToSortableTasklist();
$(_this).css('position', 'relative');
}
});
$(_this).droppable({
accept: '.subtask',
disabled: true,
drop: function(e, ui){
setTimeout('currentlyDragging = false;', 1000);
alert('Dropped something legal on a subtask');
//Deactivate all draggable/droppable and reinstate sortable
returnToSortableTasklist();
},
over: function(e, ui){
$(this).addClass('dragdropTargetHover');
$(ui.helper).addClass('dragdropHelperHover');
},
out: function (e, ui){
$(this).removeClass('dragdropTargetHover');
$(ui.helper).removeClass('dragdropHelperHover');
}
});