编辑:原标题为Mootools 的子索引刷新
对我来说,要真正 100% 确定 Mootools 引擎盖下到底发生了什么有点困难,但它似乎是这样工作的:
当一个元素从 DOM 分离然后重新插入到它的容器底部时,似乎下一个重复getNext()
或getChildren()[0]
类似的元素不会返回人们在查看 HTML 时认为的第一个元素。
下面是我想做的代码。我很茫然,我什至不确定我上面描述的是否真的是问题所在。
function slideNext() {
window.clearTimeout(sliderTimeout);
var slider = $('slider');
slider.set('tween', {duration: 500, onComplete: function(){
var slide = slider.getFirst('.block').clone();
slider.grab(slide, 'bottom');
slider.getFirst('.block').destroy();
slider.erase('style');
sliderTimeout = window.setTimeout(function(){slideNext();}, 5000);
}});
slider.tween('margin-left', 0 - slider.getSize().x);
}
编辑:在 onComplete 函数中放置一个alert(slide.get('html'));
可以清除一些东西。每次运行该函数时,警报对话框的数量都会奇怪地增加,即使它应该只发出一次警报。这似乎意味着通过slider.set('tween', {blabla})
反复使用会导致堆叠补间,这让我认为子索引可能有问题,但显然情况并非如此。这种变化完美地工作:
function slideNext() {
window.clearTimeout(sliderTimeout);
var slider = $('slider');
var myFx = new Fx.Tween('slider', {
duration: 500,
property: 'margin-left',
onComplete: function(){
var slide = slider.getFirst('.block').clone();
slider.grab(slide, 'bottom');
slider.getFirst('.block').destroy();
slider.erase('style');
sliderTimeout = window.setTimeout(function(){slideNext();}, 5000);
}
});
myFx.start(0, 0 - slider.getSize().x);
}
有人可以解释为什么会这样吗?