<p:sticky> 在 window 调整大小时不调整大小

<p:sticky> doesn't resize on window resize

我正在使用带有菜单的 <p:sticky>。我的问题是当 window 调整大小时它不会调整大小。

如何在调整 window 大小时使 <p:sticky> 也调整大小?

好的,正如我在上面的评论中所说,问题是 Primefaces 在初始化时只计算一次目标的宽度。之后是一个固定的数字,不会改变。

那么我们要做的就是重新初始化组件。我已经在 Primefaces Showcase page.

上试过了

以下客户端 Javascript 几乎 可以解决问题:

foo = PF('widget_j_idt93');
foo.init(foo.cfg);

(这里"widget_j_idt93"是Primefaces组件的widgetVar,酌情替换成自己的。)

缺少的是 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,或者可能带有参数)。