我刚刚遇到这些性能问题。当拖动或调整对话框的大小时,鼠标通常会通过iframe。正如你所提到的,这些事件被iframe捕获,导致了laggy行为。
jQuery draggable提供了一个“iframeFix”选项,该选项在拖动时放置透明的div覆盖iframe。对话框插件不提供此修复程序。查看iframefix的jquery-ui code,我可以调整它来解决我的对话框的性能问题。添加类似你的对话框拖东西,调整开始/停止选项应该做的伎俩:
$(selector).dialog({
dragStart: function (event, ui) {
$('iframe', this).each(function() {
$('<div class="ui-draggable-iframeFix" style="background: #FFF;"></div>')
.css({
width: '100%', height: '100%',
position: 'absolute', opacity: '1', zIndex: 1000, overflowX: 'hidden'
})
.css($(this).position())
.appendTo($(this).offsetParent());
});
},
dragStop: function (event, ui) {
$("div.ui-draggable-iframeFix").each(function() {
this.parentNode.removeChild(this); }); //Remove frame helpers
}
});
我已经修改了代码,以便透明的div将对话框调整,它是相对于对话框容器VS定位。 窗户。这可能需要更多的调整。理想情况下,您只需扩展对话框插件即可处理这些选项。我很快就会这样做。
This post在jQuery论坛上为我提供了指向可拖动插件修补程序的指针。
我不得不使用resizeStart和resizeStop,但现在它工作:我可以顺利地调整我的模态对话框。谢谢你,你的解决方案是优雅的,完美的作品。 – Germstorm
伟大的帮助和非常好的解决方案麦克菲尔德。由于iframe,我确实看到了性能和紧张问题。 +1 我的情况我第一次尝试你的解决方案,但你提供的链接也帮助了我,问题已经解决了一个简单的 - iframeFix:true –