2011-06-13 85 views
2

我想弄清楚如何使這樣的工作:如何使qooxdoo效果起作用?

qx.Class.define("effects.Application", 
{ 
extend : qx.application.Standalone, 
members : 
{ 
main : function() 
{ 
    // Call super class 
    this.base(arguments); 

    // Enable logging in debug variant 
    if (qx.core.Environment.get("qx.debug")) 
    { 
     // support native logging capabilities, e.g. Firebug for Firefox 
     qx.log.appender.Native; 
     // support additional cross-browser console. Press F7 to toggle visibility 
     qx.log.appender.Console; 
    } 

    var button = new qx.ui.form.Button("First Button"); 
    var fadeToggle = new qx.fx.effect.core.Fade(button.getContainerElement().getDomElement()); 
    fadeToggle.set({ 
     from : 1.0, 
     to : 0.0 
    }); 

    var doc = this.getRoot(); 
    doc.add(button); 

    button.addListener("execute", function() { 
     fadeToggle.start(); 
    },this); 
} 
} 
}); 

這是整個的application.js 只是試圖做的東西沒有運氣的效果..這就像是的Qooxdoo忽視效果

回答

4

問題是DOM元素。當你執行

button.getContainerElement().getDomElement() 

還沒有出現在DOM樹。所以函數的返回值是null。 Qooxdoo有一個渲染隊列,所以你在程序中所做的表現大多會延遲一點。使用「顯示」事件解決此問題:

var button = new qx.ui.form.Button("First Button").set({ 
    enabled: false 
}); 
var doc = this.getRoot(); 
button.addListener('appear',function(){ 
    var fadeToggle = new qx.fx.effect.core.Fade(
     button.getContainerElement().getDomElement() 
    ).set({ 
     from : 1.0, 
     to : 0.0 
    }); 
    button.addListener('execute',function(){ 
     fadeToggle.start(); 
    }); 
    button.setEnabled(true); 
}); 

位與禁用和啓用按鈕只是爲了炫耀......這將是如此之快,沒有人會注意到。

在框架中還有幾個* .flush()方法,您可以立即強制渲染,所以調用它們(正確的:-))也可能是一個選項......但是因爲JS應該儘可能地寫入異步,以上可能是正確的事情。

1

你也可能想看看

  • 相應manual page
  • 動畫演示的代碼,例如this(儘管我承認他們大多會將動畫展示給用戶操作)