为了能够跨浏览器兼容并避免出现异常行为,我建议您使用全部JQueryUI draggable callbacks。
我前几天看到,Chrome的最新版本在使用本地HTML5可拖动事件时遇到了一些非常棘手的问题。
例如,我刚刚检查过您的网页源代码,并且您正在使用$('.drag-handle').on('drag', function(){...});
=>您应该使用drag回调。
我也建议不要使用window
作为您的案例中的可滚动容器。您应该创建一个div
以包装所有表格内容并将其用作滚动容器。我过去已经完成了这个实现,并且它正在工作。
不要忘记在可拖动窗口小部件创建期间在containment
选项中设置封装ID。
如果总是不工作,你也可以尝试覆盖在drag
回调助手位置:
//Save the mouse position in global variables
$(document).mousemove(function(e){
window.mouseXPos = e.pageX;
window.mouseYPos = e.pageY;
});
$('[id^="drag-"]').each(function() {
$(this).draggable({
opacity: 0.7,
cursorAt: { top: 15, left: 50 },
scroll: true,
stop: function(){},
drag : function(e,ui){
//Force the helper position
ui.position.left = window.mouseXPos - $(this).draggable('option','cursorAt').left;
ui.position.top = window.mouseYPos- $(this).draggable('option','cursorAt').top;
});
});
我使用的浏览器(22),它似乎为我工作。当我将拖动的项目保留在顶部灰色区域时,它会滚动整个页面。然后,我必须将鼠标(仍在拖动)向下移动到桌面上。但作品... – Peter
@彼得:谢谢。看起来我的版本是24.0.1312.52米。只是再试一次,这次我拖着一整页的东西都没有,所以拖动的东西不会再上去了。在该点移动鼠标的任何数量都不会使该项目更高。你是从底部一直拖到页面顶部的吗? –
奇数。我拿下了最底部的一个项目,并将光标放在顶部灰色区域。我可以一直向上滚动,但是我失去了正在拖动的项目... – Peter