回调函数不能使用.Queue()

时间:2014-03-14 20:28:31

标签: javascript jquery function

我正在尝试在某些图像上运行循环,其中我多次更改img的src。我想让它在完成后再循环回来,这是一个连续的图像滚动。我已经设置了这样的功能:

function img_loop(){
        console.log('test');
        console.log(this_value.attr('src'));

        this_value
        .queue(function(next) {
            this_value.attr('src',new_img_src); next();
        })
        .delay(2000)
        .queue(function(next) {
            this_value.attr('src',new_img_src_2); next();
        })
        .delay(2000)
        .queue(function(next) {
            this_value.attr('src',img_src); next();
        })
        .delay(2000)
        .queue(function() {
        img_loop();
    });
}

img_loop();

一次成功运行。好奇的是它记录到控制台,运行一次,然后再次登录到控制台,这意味着它再次被称为函数,但我想它在第一个队列函数处停止。我在第一个队列函数中运行了一个控制台,可以确认它第二次没有运行。

我假设在回调函数中使用queue()有限制吗?关于它为什么不再运行的任何想法?

修改

在参考下面的答案时,我尝试使用带有参数的函数,然后让它循环放回该参数,但不幸的是,这不起作用:

function img_loop(the_image){
        var that = the_image;

        console.log(the_image);

        the_image
        .queue(function(next) {
            the_image.attr('src',new_img_src); next();
        })
        .delay(2000)
        .queue(function(next) {
            the_image.attr('src',img_src); next();
        })
        .delay(2000)
        .queue(function() {
            img_loop(that);
        });
}

    img_loop(me);

当我在控制台中将其注销时,它会显示相同的内容,因此它会在循环运行一次后保留该值。我不确定为什么它不再触发?

只是在其他人有想法的情况下显示我的进展?

1 个答案:

答案 0 :(得分:1)

如果您在撰写this_value时谈论的是this关键字(函数的上下文),则this的值可能会在第二次调用img_loop时丢失1}}。

修改

通过调用.queue或致电next()

,我在上次.dequeue()调用中再次考虑您的代码

我已经对以下代码进行了修改,试试这个。

function img_loop(the_image){
    console.log(the_image);
    the_image
    .queue(function(next) {
        the_image.attr('src',new_img_src); next();
    })
    .delay(2000)
    .queue(function(next) {
        the_image.attr('src',new_img_src_2); next();
    })
    .delay(2000)
    .queue(function(next) {
        the_image.attr('src',img_src); next();
    })
    .delay(2000)
    .queue(function() {
        img_loop.(the_image);
        $(this).dequeue();
  });
}

img_loop(me);