jQuery UI 可拖动位置受 scrollTop 影响? (包括 JSFiddle)

Posted

技术标签:

【中文标题】jQuery UI 可拖动位置受 scrollTop 影响? (包括 JSFiddle)【英文标题】:jQuery UI draggable position being affected by scrollTop? (JSFiddle Included) 【发布时间】:2011-09-01 17:43:21 【问题描述】:

http://jsfiddle.net/mgJf2/2/

在包含 jQueryUI 之后,唯一的 javascript 是:

$("#scrollbox").draggable(
    axis: 'y',
    drag: function(event, ui) 
         $(document).scrollTop(ui.position.top);
    ,
);

文档滚动对可拖动的 div 具有复合效果(我认为它具有固定位置)。它会导致卷轴跑掉。取出文档滚动,它工作正常,只是没有我想要的页面滚动。

有什么想法吗?

谢谢!

【问题讨论】:

【参考方案1】:

这是错误报告,尚未修复:http://bugs.jqueryui.com/ticket/5009

jQuery UI 中还有一个已知的 bug,到目前为止还没有官方修复,修复计划到 1.9 版。有几种方法可以解决它,从简单到丑陋的 hack,在这里查看我的回复:jQuery draggable shows helper in wrong place after page scrolled

【讨论】:

是否还有其他框架可以很好地完成此功能?【参考方案2】:

我发现使用拖动功能(触发onmousemove)可以偏移助手的位置。您必须在发布的示例中定位助手 - 我想您只需将 ui.item 替换为 ui.helper

drag: function(event, ui)  
    var offset = $(this).offset();
    var yPos = offset.top; 
    ui.helper.css('margin-top', $(window).scrollTop() + 'px');

这应该会修复文档在 Chrome 和 Safari 中滚动时的位置。 Mozilla 是唯一一个在没有此修复的情况下正常工作的浏览器。没有在 IE 上测试过。

干杯

【讨论】:

【参考方案3】:

保持简单。这是我的解决方案,效果很好。

drag: function(event, ui)  
    ui.helper.css('margin-top', -(t-c.scrollTop()));
,
start: function( event, ui ) 
    t = c.scrollTop();
,

【讨论】:

以上是关于jQuery UI 可拖动位置受 scrollTop 影响? (包括 JSFiddle)的主要内容,如果未能解决你的问题,请参考以下文章

如何根据条件恢复可拖动的jquery UI的位置

jQuery UI 可拖动在我的可拖动 div 上设置“位置:相对”

JQuery-UI可拖动重置到原始位置

jQuery UI 可拖动,具有绝对位置和底部属性

滚动浏览器时使用错误起始位置的可拖动 jQuery UI 元素?

保存元素位置和大小(JQuery ui 可调整大小和可拖动)