【发布时间】:2016-06-02 11:52:58
【问题描述】:
我创建了一个网格,其中每一列都分配了一个数字。我想要一个可拖动的 div 捕捉到每列的边框,然后基本上显示我的 div 捕捉到的最外列的范围。
示例在这里: https://jsfiddle.net/Cataras/dpdLLcft/
$(function() {
$(".draggable").draggable({
snap: ".hour-full, .hour-half",
snapMode: 'both',
stop: function(event, ui) {
/* Get the possible snap targets: */
var snapped = $(this).data('ui-draggable').snapElements;
/* Pull out only the snap targets that are "snapping": */
var snappedTo = $.map(snapped, function(element) {
return element.snapping ? element.item : null;
});
/* Display the results: */
var result = '';
$.each(snappedTo, function(idx, item) {
result += $(item).text() + ", ";
});
$("#results").html("Snapped to: " + (result === '' ? "Nothing!" : result));
}
});
});
取自这个问题的代码:How to find out about the "snapped to" element for jQuery UI draggable elements on snap
但是,它不仅显示 div 左右两侧的列号,还显示其间的所有列。有时还有右边的下一个,红色条显然没有触及。有什么建议吗?
【问题讨论】:
-
我认为使用 Draggable 和 droppables 创建这种交互会更好。
-
调整
snapTolerance似乎使捕捉不那么贪婪。它仍然显示捕捉比您想要的更多的元素。由于它可以捕捉到两种类型的元素.hour-full, .hour-half,因此它将捕捉到的两个元素都设置为真。例如,如果你在 2 和 5 之间下降,你会得到 1、2、3、4、5、6,因为从技术上讲,由于模式为both,它会同时捕捉到所有这些。我认为您需要根据它在stop中的位置与其捕捉到的位置进行映射。
标签: jquery jquery-ui draggable jquery-ui-draggable