setInterval第一次不会触发

时间:2014-03-01 21:48:14

标签: javascript scroll setinterval

有两个计时器, tim_change每5秒更换一次幻灯片,即创建一个.. tim_scroll将幻灯片滚动35次x 20毫秒。

现在的问题是第一次调用changeSlide()时,幻灯片不会滚动。 好像tim_scroll第一次不起作用。但在那之后工作。因此,最后,幻灯片在页面加载后10秒更改,之后每5秒更改一次。 警报总是每隔5秒显示一次(因此我猜测正确调用changeSlide())。

怎么回事?我有另一个案例,这些计时器第一次不能正常工作。 FireFox 27.01。

var tim_change;
var tim_scroll;
var counter;

function init() {
    registerSlideChange();
}

function registerSlideChange() {
    tim_change = window.setInterval("changeSlide()", 5000);
}

function changeSlide() {
    alert("changeSlide");
    tim_scroll = window.setInterval("scrollFrame('scrollerID', 6, 0)", 20);
}

function scrollFrame(name, x, y) {
    var frame = document.getElementById(name);
    if(counter < 35) {
        frame.contentWindow.scrollBy(x, y);
        counter++;
    }
    else {
        clearInterval(tim_scroll);
        counter = 0;
    }
}

window.onload =init;

1 个答案:

答案 0 :(得分:0)

我认为你误解了setInterval是如何运作的。它不会立即执行代码,而是仅在间隔之后执行。例如,如果您希望scrollFrame()changeSlide()运行后立即执行,则需要在scrollFrame()中致电changeSlide()

function changeSlide() {
    alert("changeSlide");
    scrollFrame('scrollerID', 6, 0);
    tim_scroll = window.setInterval("scrollFrame('scrollerID', 6, 0)", 20);
}

同样,如果您希望在changeSlide()运行时立即执行registerChangeSlide(),则必须调用它。

function registerSlideChange() {
    changeSlide();
    tim_change = window.setInterval("changeSlide()", 5000);
}