由于某些原因,ss.transition()在onslick触发ss.goTo()后不会影响相应的DOM元素。 // Init下的ss.transition()调用确实按预期工作。我认为这是一个范围问题。帮助不大?
var ss = {};
ss.goTo = function(i) {
ss.old = ss.current;
ss.current = ss.slides[i];
ss.transition();
}
ss.transition = function() {
ss.old.style.display = "none";
ss.current.style.display = "block";
}
// Hooks
ss.div = document.getElementById("slides");
ss.as = ss.div.getElementsByTagName("a");
// References
ss.slides = [];
for (i in ss.as) {
if (ss.as[i].rel == "slide") {
ss.slides.push(ss.as[i]);
}
}
ss.first = ss.slides[0];
ss.last = ss.slides[ss.slides.length-1];
// Init
ss.current = ss.first;
ss.old = ss.last;
ss.transition();
答案 0 :(得分:2)
for (i in ss.as) {
您不应该在数组上使用for...in
循环,或者在本例中使用NodeList。您将获得不需要的成员资产,例如item
和length
。您也不能依赖于以任何特定顺序返回的项目;很可能至少ss.last
不会是你所期望的。如果它是非商品属性,ss.old.style.display
肯定会因异常而失败,从而破坏了脚本。
序列的正确循环是旧式C构造:
for (var i= 0; i<ss.as.length; i++)
此外,您将调用绑定到goTo
的哪个位置?如果你在一个带有函数的循环中进行它,你可能也会遇到经典的循环闭包问题。见例如。 this question
答案 1 :(得分:0)
失败的原因是因为您在再次显示之前丢失了对当前隐藏元素的引用。你需要将old分配给display:block,然后切换old = current,current = variable,然后隐藏旧的。