我正在使用<p:sticky>
菜单。我的问题是,在调整窗口大小时它不会调整大小。
如何在调整窗口大小时使<p:sticky>
调整大小?
答案 0 :(得分:2)
好的,正如我在上面的评论中所说,问题是Primefaces只在初始化时计算一次目标的宽度。之后,这是一个固定的数字,不会改变。
所以我们要做的是重新初始化组件。我已经在Primefaces Showcase page上试了一下。
以下客户端Javascript 几乎可以解决问题:
foo = PF('widget_j_idt93');
foo.init(foo.cfg);
(这里“widget_j_idt93”是Primefaces组件的widgetVar
。根据需要替换你自己的。{/ p>
缺少的是Primefaces(非常正确)认为已经 的小部件已初始化。为了取消初始化窗口小部件,我们可以先删除所有元素样式:
$("#tb").attr("style","")
(其中“#tb”是目标的选择器,即您的菜单。)
因此,如果您创建的函数首先删除样式然后重置窗口小部件,它应该可以工作。
编辑:After looking at the client-side code of the Sticky component我明白了。您必须在空白和初始化之前恢复,然后必须显式运行粘性或非粘性调用。 所以这应该是解决方案:
fixSticky = function() {
var bla=PF('widget_j_idt93');
bla.restore();
bla.target.attr("style","");
bla.init(bla.cfg);
if($(window).scrollTop() > bla.initialState.top) {bla.fix();} else {bla.restore();}
}
只要调整页面大小,就可以运行此函数(修改为您自己的widgetVar,或者可能使用参数)。