我正在尝试使用 jquery slideUp() 和 slideDown() 为与不同面板交换的面板设置动画。我已经尝试了一些事情,例如使用属性修饰符和 AjaxLink 以及 prependJavascript 和 appendJavascript 的变体,但是我似乎无法让它工作。下面的代码很松散,这意味着我知道它在语法上不是 100% 正确的。我已将我的情况简化为一个更简单的示例,如下所示。
Panel currentPanel = new Panel1("panelId");
add(currentPanel );
Link link = new Link("link")
{
public void onClick()
{
currentPanel = new Panel2("panelId")
addOrReplace(currentPanel);
}
}
link.add(new AttributeModifier("onclick", "$('#panel.getMarkup()').slideUp()");
我还研究了http://wicketinaction.com/2013/02/replace-components-with-animation/上的示例。我认为这个例子的问题是它正在为支持模型更改后正在刷新或替换自身的组件设置动画。我的情况有所不同,因为我正在用不同的组件更改整个组件。我还认为我需要先将要交换的组件设置为 display:none,这样 slideDown() 才能正常工作。
public void onClick(AjaxRequestTarget target) {
component.add(new DisplayNoneBehavior());
target.prependJavaScript("notify|jQuery('#" + component.getMarkupId() + "').slideUp(1000, notify);");
target.add(component);
target.appendJavaScript("jQuery('#"+component.getMarkupId()+"').slideDown(1000);");
}
private static class DisplayNoneBehavior extends AttributeAppender {
private DisplayNoneBehavior() {
super("style", Model.of("display: none"));
}
@Override
public boolean isTemporary(Component component) {
return true;
}
}
感谢您在高级方面的任何帮助。如果有任何不清楚的地方,请告诉我,我会尽力澄清。