我有一個FlowPanel,我試圖來回像iPhone導航一樣來回。 (請參閱this我原來的問題後如何做到這一點)GWT動畫最終值不被尊重
所以我有它「工作」的代碼如下所示。我說在引號中工作是因爲我發現我的滾動條的最終位置不精確,滾動時總是發生變化。
的GWT.log總是說我要找的實際值,因此例如與下面scrollTo的號召,我GWT.log說:
ScrollStart:0 scrollStop:-246
但是當我實際分析fireBug中的元素時,它的css左邊的位置永遠不會是-246px。有時它會關閉多達10px,因此我的面板在完成之前就停止了滾動。
最糟糕的部分是,這個導航動畫來回動畫,所以後續點擊可以真正拋出它,我需要像素完美定位,否則整個事情看起來不對。
我甚至不知道從哪裏開始調試,除了我已經完成。任何提示都表示讚賞。
編輯:附加記錄的信息:
記錄中的onUpdate內部示出了這一點:
Updating: progress: 0.09319577524960648 position: -22.926160711403195
Updating: progress: 0.1328387452821571 position: -32.67833133941065
Updating: progress: 0.609071620698271 position: -149.83161869177468
Updating: progress: 0.7269952498697734 position: -178.84083146796425
Updating: progress: 0.9852532367342712 position: -242.37229623663072
AnimationComplete: final scrollStart/scrollStop: 0/-246
爲什麼它終止於0.98%???
代碼來調用動畫
scroller = new Scroller();
scroller.scrollTo(-246,400);
動畫代碼
public class Scroller extends Animation {
private FlowPanel scroller;
private final Element e;
public Scroller(){
scroller = new FlowPanel();
e = scroller.getElement();
}
public void scrollTo(int position, int milliseconds) {
scrollStart = e.getOffsetLeft();
scrollStop = position;
GWT.log("ScrollStart: " + scrollStart + " scrollStop: " + scrollStop);
run(milliseconds);
}
@Override
protected void onUpdate(double progress) {
double position = scrollStart + (progress * (scrollStop - scrollStart));
e.getStyle().setLeft(position, Style.Unit.PX);
}
}
我已經做到這一點,其實,但我認爲這是一個黑客。所以GWT不保證進度會達到100%?他們沒有在文檔中明顯表示 – brad 2010-04-19 20:15:54
onUpdate將永遠不會達到1.0,因爲finished = curTime> = startTime + duration,但是文檔說它是1.0(含)。 – LINEMAN78 2012-05-30 23:17:31
我提交了一個錯誤報告,我們將看看GWT團隊所說的內容: http://code.google.com/p/google-web-toolkit/issues/detail?id=7393 – LINEMAN78 2012-05-30 23:26:55