使用dojo淡化Ajax代码段的一部分

时间:2011-07-11 15:50:45

标签: javascript css ajax dojo

我想重新加载一些页面,并使用dojo淡化部分内容。现在的问题是,一旦我在加载后插入innerHTML,一切都会立即可见。我会试着解释一下:

function reload(page) {
   var sliderBox = dojo.byId("slider_box");
   var xhrArgs = {
     url: "/myhtmlsnippet.html",
     load: function(data) {
        dojo.fadeOut({
            duration:100,
            node:sliderBox,
            onEnd:function() {
                dojo.byId('slides_container').innerHTML = data;
                dojo.fadeIn({
                    duration:400,
                    node:sliderBox,
                    onEnd:slideRotate()
                }).play();
            }
        }).play();
     }
  }
  var ajax = dojo.xhrGet(xhrArgs);
}

slider_boxslides_container的孩子。我希望淡出slider_box,重新加载slides_containerslider_box 隐藏,然后淡入slider_box
我尝试通过CSS将slider_box设置为visibility:hidden,但这种方式永远不会消失。 那么,任何人都可以帮助我吗?

1 个答案:

答案 0 :(得分:1)

首先,淡出节点#slider_box。所以它的不透明度下降到0。

然后,您通过一些新内容替换该节点。指令后仍会有#slider_box:

dojo.byId('slides_container').innerHTML = data

但这将是一个新节点,尚未触及不透明度。

因此,它的完全可见和fadeIn操作会将其不透明度从1设置为1,换句话说它将无效。

您必须在innerHTML指令之后将不透明度设置为0和/或隐藏可见性(不知道dojo动画如何工作)。 编辑:或者更好,在您正在调用的html模板中将不透明度设置为0 befire。

另外,你传递给fadeIn的node:参数的sliderBox变量指的是,正如我前面所说的那样,你用一个替换你的innerHTML语句消灭了一个节点。

您必须再次查询新节点,如下所示:

node:dojo.byId("slider_box"),

总之,innerHTML是所有javascript evil的来源(当然,就是说)。