在方形空间 (YUI) 上重绘元素的问题

Issue with redrawing elements on squarespace (YUI)

这是一个非常非常特殊的案例。得到解决方案之前的标题是“Extreme force redraw element on jQuery”。以下所有内容均未修改。

使用 Squarespace(有许多 YUI 元素),我在自定义 CSS 上将页脚设置为 display: none。页脚有一个画廊块(那里有很多脚本)。

然后我使用 prepend 将页脚移动到另一个页面元素中。总而言之就是这些:

$yo = $('#yo');
$yo.parent().remove();
$('#here').prepend($yo);
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<footer style="display: none">
    delme
    <div id="yo">oi</div>
</footer>
<div id="here">
    move here
</div>

当然,这在这里没有问题。但在我的用例中,它没有。如果我删除自定义 CSS,它 有点 可以工作。仍然存在一个错误,它无法正确调整大小,并保持与第一个 parent 相同的大小,而不是第二个。所以,画廊仍然没有正确重绘!其实也不是CSSdisplay的错。

里面的remove没有问题,没有区别就去掉了。我把它留在那里只是为了让大家瞥见我试图处理的所有噪音。

甚至更多,如果我将其添加到 onLoad 脚本中:

$('footer').hide()

效果和预期的一样。事实上,我越晚隐藏它,它的效果就越好,但 永远不会 达到它应有的完美程度。如果我把它藏在 DOMready 上,它就会坏掉一半。如果我将它隐藏在 CSS 上,正如我之前所说,它甚至不会出现。那就是……

所有情况下只需打开控制台Window或使用鼠标手动调整window的大小,画廊就会完全按照应有的方式显示, 都已正确修复,没有任何问题!

所以,我认为尝试强制重绘应该能让事情正常进行。好吧,事实并非如此。 offsetHeight 不起作用,摆弄 css 也无济于事。当然我也试过 trigger('resize') 但没有运气! :( 尝试了几个小时,似乎没有任何效果,即使在控制台中也是如此!

我会在此处保留该错误一段时间。现在,它显示了将其隐藏在 $(document).ready:

处的问题

http://www.cregox.com/bugs/bannerify/

有没有办法 "simply" 强制重新绘制,这样我就不必继续挖掘 bleep squarespace 中正在用 CSS 做的所有这些乱七八糟的事情?我敢打赌 sqsp 在这方面做得很好,但至少在我看来它是一团糟。

如果手动调整大小有效,那么您可以尝试:

$(window).trigger('resize');

看来我是对的:Squarespaces 的图库组件需要提醒您已将其移至新的区域。

在您调用 $('#here').prepend($yo) 后,添加此行:

Y.one( $yo.get(0) ).simulate('resize');