我想重新加载一些页面,并使用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_box
是slides_container
的孩子。我希望淡出slider_box
,重新加载slides_container
,slider_box
隐藏,然后淡入slider_box
。
我尝试通过CSS将slider_box
设置为visibility:hidden
,但这种方式永远不会消失。
那么,任何人都可以帮助我吗?
答案 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的来源(当然,就是说)。