別の自家製ソリューションは、GWT LayoutPanel に基づくことができます。これにより、LayoutPanel が AnimatedLayout インターフェイスを実装するため、スクロールのアニメーションを表示できます。
public class CarouselPanel extends LayoutPanel {
int itsCurrentWidget = 0;
private ArrayList<Widget> itsWidgets;
private Button itsLeftButton;
private Button itsRightButton;
addToCarousel(Widget widget) はウィジェットをウィジェット リストに追加しますが、パネルには追加しません。パネル内の実際のウィジェットは、表示されるべきものです。
表示される中央のウィジェットのレイアウトは、次の方法で制御できます。
private void setCenter(Widget widget, boolean newWidget) {
if (widget != null) {
if (newWidget)
add(widget);
setWidgetLeftWidth(widget, 10, Unit.PCT, 80, Unit.PCT);
setWidgetTopHeight(widget, 10, Unit.PCT, 80, Unit.PCT);
widget.removeStyleName("sideCarousel");
widget.setStylePrimaryName("centerCarousel");
}
}
および右のウィジェット:
private void setRight(Widget widget, boolean newWidget) {
if (widget != null) {
if (newWidget)
add(widget);
setWidgetLeftWidth(widget, 50, Unit.PCT, 45, Unit.PCT);
setWidgetTopHeight(widget, 20, Unit.PCT, 60, Unit.PCT);
widget.removeStyleName("centerCarousel");
widget.setStylePrimaryName("sideCarousel");
if (itsRightHandler != null)
itsRightHandler.removeHandler();
itsRightHandler = widget.addDomHandler(new ClickHandler() {
public void onClick(final ClickEvent event) {
scrollRight();
}
}, ClickEvent.getType());
}
}
クリック リスナーを追加することで、右 (または左) ウィジェットをスクロール ボタンとして使用することもできます。
スクロール方法は次のようになります。
public void scrollRight() {
if (itsCurrentWidget >= getWidgetCountInCarousel()-1)
return;
if (itsCurrentWidget > 0) {
Widget hideWidget = getWidgetInCarousel(itsCurrentWidget-1);
remove(hideWidget);
}
Widget leftWidget = getWidgetInCarousel(itsCurrentWidget);
Widget centerWidget = getWidgetInCarousel(++itsCurrentWidget);
Widget rightWidget = null;
if (itsCurrentWidget+1 < getWidgetCountInCarousel()) {
rightWidget = getWidgetInCarousel(itsCurrentWidget+1);
}
setLeft(leftWidget, false);
setRight(rightWidget, true);
setCenter(centerWidget, false);
animate(500);
}
ウィジェットをスムーズに移動するために、最後の animate メソッドに注意してください。
センター ウィジェットの z-index を制御する CSS ルールを定義することを忘れないでください。
.sideCarousel {
z-index: 0;
}
.centerCarousel {
z-index: 1;
}
それが役立つことを願っています。