对于未来的读者
我遇到了一个类似的问题,当在bootstrap对话框的滚动div内拖动时,助手元素具有偏移量。释放拖动对象时,动画会将拖动的辅助元素发送到其新位置,而不考虑页面的滚动部分,这给用户带来了令人困惑的反馈。
为了使相对位置和对话框容器中的overflow-y:auto正常工作,我的解决方案是:
1- 在排序开始事件中,在助手对象的margin-top上添加scrollTop()偏移量;
2- 在beforeStop事件中删除margin-top
这修复了拖动后动画的偏差,但是在页面的滚动部分拖动时,助手对象被推到光标下面。最后的修复是
3- 使用排序事件计算并设置助手对象的top属性,相对于指针和容器偏移量。
$(...).sortable({
...
start: function (event, ui) {
ui.helper.css('margin-top', $("#mybootstrap-dialog").scrollTop());
},
beforeStop: function (event, ui){
ui.helper.css('margin-top',0);
},
sort: function(event, ui) {
var top = event.clientY - $('#my-sortable-ul').offset().top - $("#mybootstrap-dialog").scrollTop();
ui.helper.css({'top' : top + 'px'});
}
},
...
});
希望这有所帮助。