<p:sticky>不会在窗口调整大小</p:sticky>上调整大小

时间:2015-01-06 19:18:55

标签: jsf primefaces sticky window-resize

我正在使用<p:sticky>菜单。我的问题是,在调整窗口大小时它不会调整大小。

如何在调整窗口大小时使<p:sticky>调整大小?

1 个答案:

答案 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,或者可能使用参数)。

相关问题