請參閱代碼here on jsbin.我基本上試圖創建一系列開關。每個填充的紅色方塊都可以上下拖動。底部的紅色輪廓是放置區域。當一個正方形被拖過一個有資格接受它的放置區時,放置區應該變成粉紅色。jQuery拖/放範圍問題
這個代碼有兩個問題。其中之一是,雖然觸發器的運動被限制在y軸上,但它們仍然可以落在任何放置區域上。點擊並拖動切換按鈕並滑動底部行,即使切換保持原位,您也會看到拖放區變成粉紅色。
這導致第二個問題。爲了解決這個問題,我嘗試使用範圍選項,該選項將拖放組合起來。拖動只能放在具有相同範圍的拖放區域上。在上面的例子中,添加範圍的行被註釋掉了。每個拖放的範圍都是「默認」。
如果您取消註釋這兩行(如果您是jsbin的新手,請單擊右上角的標籤,然後在更改後單擊預覽),您會看到,不是將每個拖動限制到一個拖放區域,而是可以不再落在任何拖放區域。回調函數永遠不會觸發。
爲了方便起見,這裏是實施例的一部分的javascript:
$(document).ready(function() {
var draggables = $('div.dragMe'),
droppables = $('div.dropMe');
draggables.draggable(
{
axis: 'y',
containment: 'parent'
});
droppables.droppable(
{
hoverClass: 'dropped',
drop: dropCallBack
});
draggables.each(function(index) {
//$(this).draggable('option', 'scope', ''+index);
//droppables.eq(index).droppable('option', 'scope', ''+index);
$(this).text($(this).draggable('option', 'scope'))
droppables.eq(index).text(droppables.eq(index).droppable('option', 'scope'));
});
function dropCallBack(e, ui) {
alert('Dropped!');
}
});
我不想給防解決方案,但你有沒有考慮,而不是拖放,只是觸發與開關mouseDown'.mousedown(function)'事件?在我看來,它的可用性更好(作爲最小wtf的路徑),並與移動設備相處得更好。 – 2010-06-22 21:40:11
有時反解決方案是最好的解決方案!好點子。如果我得到這個工作,我總是可以做到這一點。最初的想法是嘗試設計一些使用物理類比進行交互的導航元素。當它們被釋放時,開關應當「卡扣」到位,就好像有一個制動器,只是還沒有寫入那個零件。 – jasongetsdown 2010-06-22 21:59:07