2011-06-13 46 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(尽管我承认他们大多会将动画展示给用户操作)