我有一个沿Y轴可拖动的div。当div达到50px时,我会破坏可拖动元素,然后执行动画以将其移回到开始,如何在动画完成后再次启用该元素可再拖动?
这是一个Fiddle
$( ".box" ).draggable({
axis: "y",
drag: function( event, ui ) {
y2 = ui.position.top;
x2 = ui.position.left;
$('.result').text(y2);
if (y2 > 100) {
$( ".box" ).draggable('destroy')
$('.box').animate({
top:0
}, {
duration:500,
complete: function() {
//$( ".box" ).draggable('enable');//doesn't work
$( ".box" ).draggable({axis: "y"});
}
})
}
}
});
答案 0 :(得分:1)
你应该这样做:
object.draggable( 'disable' )
这将禁用该对象,并且它不会被拖动。
object.draggable( 'enable' )
之后,您可以重新启用对象上的拖动。
答案 1 :(得分:0)
稍微调整一下user2436738的答案就可以了。
您只需要阻止拖动事件更新位置,同时将框动画回原始位置:
var reverting = false;
$(".box").draggable({
axis: "y",
drag: function(event, ui) {
var y2 = ui.position.top;
var x2 = ui.position.left;
$('.result').text(y2);
if (reverting){
event.preventDefault();
event.stopImmediatePropagation();
} else if (y2 > 100) {
reverting = true;
revertDrag($('.box'));
}
}
});
function revertDrag(element){
element.draggable('disable');
element.animate({
top: 0
}, {
duration: 500,
complete: function() {
reverting = false;
element.draggable('enable');
}
})
}