请参阅代码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