在Vaadin 14 Application中执行JS代码无济于事

我正在尝试在加载页面时进行简单的向下滚动。

@Route("somthing")
public class SomeView extends VerticalLayout{

public SomeView(){
    ...
    Adding some Elements
    ...

    UI.getcurrent().getPage().executeJs("window.scroll(0,300)");
}
}

我还尝试将侦听器添加到窗口:

 UI.getcurrent().getPage().executeJs("window.addEventListener('onload',function(){console.log('trigger');window.scroll(0,300);});");

但是在两种情况下,加载页面时都不会发生任何事情。

lingcy 回答:在Vaadin 14 Application中执行JS代码无济于事

就像评论中的Olli一样,第二个不起作用,因为在添加事件侦听器时onload事件已经发生。

我相信第一个不起作用,因为SomeView尚未附加到页面(在构造函数中执行js时),因此页面的内容不足以滚动。 br /> 您应该在View的onAttach方法中执行该javascript。

@Route("somthing")
public class SomeView extends VerticalLayout{

    public SomeView(){
        ...
    }

    @Override
    public void onAttach(AttachEvent attachEvent) {
        UI.getCurrent().getPage().executeJs("window.scroll(0,300)");
    }
}
,

只需使用 getElement()代替 UI.getCurrent()。getPage()

@Route("something")
public class SomeView extends VerticalLayout{

  public SomeView(){
    ...
    Adding some Elements
    ...

    getElement().executeJs("window.scroll(0,300)");
  }
}

SomeView 的构造器中。

本文链接:https://www.f2er.com/3151497.html

大家都在问