简体   繁体   English

递归函数JS

[英]Recursive function JS

I've written a few functions and need to execute them one after another endlessly. 我已经写了一些函数,需要不断地执行它们。

var bGposition = $("ul.sigProClassic li.sigProThumb a.sigProLink img.sigProImg");
function posDown() {
    bGposition.css({
        backgroundPosition: "0% 0%",
    }).animate({
        backgroundPositionX: '100%',
        backgroundPositionY: '100%',
    }, 3000)
 }

function posUp() {
    bGposition.css({
    backgroundPosition: "100% 100%",
    }).animate({
        backgroundPositionX: '0%',
        backgroundPositionY: '0%',
    }, 3000)
}
posUp();
posDown();
posUp();
posDown();

I've already found a way to make it work, but I need to call a function every time manually. 我已经找到了使其工作的方法,但是我需要每次手动调用一个函数。

The problem is, when using a callback I'm getting a "maximum call stack size exceeded" error, after that it's starting to work. 问题是,在使用callback时,出现“超出最大调用堆栈大小”错误,此后开始工作。

setTimeout is not working in this case. setTimeout在这种情况下不起作用。

How can i fix it? 我该如何解决? Please help! 请帮忙!

PS Sorry for my English! PS对不起,我的英语!

Add the posUp and posDown as a callback function to your jQuery.animate . posUpposDown作为回调函数添加到jQuery.animate

var bGposition = $("ul.sigProClassic li.sigProThumb a.sigProLink img.sigProImg");
function posDown() {
    bGposition.css({
        backgroundPosition: "0% 0%",
    }).animate({
        backgroundPositionX: '100%',
        backgroundPositionY: '100%',
    }, 3000, posUp)
 }

function posUp() {
    bGposition.css({
    backgroundPosition: "100% 100%",
    }).animate({
        backgroundPositionX: '0%',
        backgroundPositionY: '0%',
    }, 3000, posDown)
}
posUp()

I've "solved" this problem by adding a callback and removing background-position.Thanks a lot! 我通过添加回调并删除背景位置来“解决”此问题。非常感谢!

var bGposition = $("ul.sigProClassic li.sigProThumb a.sigProLink img.sigProImg");
function posDown() {
    bGposition.animate({
        backgroundPositionX: '100%',
        backgroundPositionY: '100%',
    }, {
        duration: 3000,
        queue: true,
        complete: function() {
            bGposition.animate({
                backgroundPositionX: '0%',
                backgroundPositionY: '0%',
            }, {
                duration: 3000,
                queue: true,
                complete: posDown()
            })
        }
    })
}
posDown();

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM