使用jQuery UI的.draggable()
函数,我试图让红色元素捕捉到蓝色容器的内部。它首先捕捉到一个边缘,而不是完全捕捉到它内部(即两个边缘)。您必须继续拖动它,直到它与另一个轴对齐。
当它开始以任何角度拍摄时,我希望它到达其最终位置(完全在容器内)。有没有办法检测快照何时开始(即事件被触发),然后使用它来手动重新定位红框?
HTML:
<div id="box"></div>
<div id="container"></div>
JavaScript的:
$('#box').draggable({
snap: '#container',
snapMode: 'inner',
snapTolerance: 50
});
CSS:
#box {
background: red;
width: 100px;
height: 100px;
position: absolute;
z-index: 1;
}
#container {
width: 102px;
height: 102px;
position: absolute;
top: 50%;
left: 50%;
margin-top: -51px;
margin-left: -51px;
border: 1px solid blue;
}
答案 0 :(得分:2)
小提琴:http://jsfiddle.net/W8yaz/9/
快照活动帮助:Jquery UI – draggable 'snap' event
现在,在捕捉之后不再有可能的拖拽。这将是另一个令人头痛的问题。
除了注意:你不能触发mouseup来取消拖动事件,这会导致一个已知的javascript错误,可以在之前的小提琴中看到:http://jsfiddle.net/W8yaz/7/
JavaScript的:
$('#box').draggable({
snap: '#container',
snapMode: 'inner',
snapTolerance: 50,
drag: function (event, ui) {
if ($(this).hasClass('snapped')) {
var position = $('#container').position();
$(this).css({
top: position.top,
left: position.left
});
return false;
} else {
var draggable = $(this).data("uiDraggable");
$.each(draggable.snapElements, function (index, element) {
if (element.snapping) {
draggable._trigger("snapped", event, $.extend({}, ui, {
snapElement: $(element.item)
}));
}
});
}
},
snapped: function (event, ui) {
$(this).addClass('snapped');
}
});