0

我一生都无法理解为什么我的 setInterval() 函数只执行一次。我相信我根据它的用法做对了。这是一个幻灯片脚本,它将一组幻灯片作为名为 TheBand 的幻灯片对象的一部分,并使用 setInterval() 更改幻灯片。

这是计时器:

    current_band.obj_timer = window.setInterval(function () {
         TheBand.nextSlide(current_band_id);
    }, current_band.timer);

这是 nextSlide 函数:

    nextSlide : function (band_id) {

    var obj_band = TheBand.bands[band_id];

    if (band_id == 0) {
        console.log(obj_band.current_slide, obj_band.slide_count)
    }

    if (obj_band.current_slide + 1 >= obj_band.slide_count) {
        new_slide = 0;
    } else {
        new_slide = obj_band.current_slide + 1;
    }

    TheBand.changeSlide(band_id, new_slide);
},

然后是changeSlide函数:

    changeSlide : function (band_id, slide_id) {

    var obj_band = TheBand.bands[band_id];

    if (slide_id != obj_band.current_slide) {

        // Get the viewport width for display purposes
        var slide_width = jQuery(obj_band.viewport).width();

        // Set up the slide objects
        var current_slide = jQuery(obj_band.slides[obj_band.current_slide]);
        var new_slide = jQuery(obj_band.slides[slide_id]);

        // Set the left value for the new slide and show it
        new_slide.css('left', slide_width).width(slide_width).height(obj_band.max_height);
        new_slide.show();

        // Animate the slide transition
        current_slide.animate({ left: -slide_width }, obj_band.transition_time);
        new_slide.animate({ left: 0 }, obj_band.transition_time, 'swing');
        if (new_slide.css('background-color') != current_slide.css('background-color')) {
            jQuery(obj_band.back).animate({ backgroundColor : new_slide.css('background-color') }, obj_band.transition_time);
        }

        // Set the class for the nav buttons
        jQuery(obj_band.nav_buttons[obj_band.current_slide]).removeClass('selected');
        jQuery(obj_band.nav_buttons[slide_id]).addClass('selected');

        // Run the slide javascript - be careful with this!
        eval(obj_band.slide_script[obj_band.current_slide].unload);
        eval(obj_band.slide_script[slide_id].load);

        window.setTimeout(function () {
            eval(obj_band.slide_script[slide_id].ready);
        }, obj_band.transition_time);

        // Set the current slide variable
        obj_band.current_slide = slide_id;

        // Set the correct Nav color
        TheBand.setNavColor(band_id);

    }

},

看起来很简单,但我只看到第二张幻灯片!?控制台中没有错误或警告,如果我看到清除计时器断点,它确实显示了清除计时器事件,但它不是来自此代码......请帮忙?

PS如果我注释掉 changeSlide 函数,setInterval() 计时器不会中断。

4

0 回答 0