0

我在一个变量中设置了一个函数,该函数被多次调用,并且应该在第一次完成后循环。

验证我的代码后,我认为这是某个地方的失误,但我找不到它

这是我的代码

setTimeout(function () {
    var tre_heartbeat_small;
    playing = function () {
        tre_heartbeat_small = function () {
            //stuff it does
        }
    }

    function heartbeatloop() {
        function () {
            playing();
        }
        setTimeout(function () {
            playing();
        }, 800, heartbeatloop)
    }
    heartbeatloop();
}, 1500);

这是给你的小提琴:http: //jsfiddle.net/nRwkz/

4

2 回答 2

1

由于您已经在使用 jQuery,我已经设置了一个示例,但没有明确使用setTimeoutsetInterval根本没有使用 - 只是出于好奇:)
所有的魔法都是用$.when延迟对象完成的

var timer = 500,
    animateLow = function (callback) {
        $.when($("#test").animate({
            height: '977px',
            width: '1080px',
            left: '49.5%',
            top: '370px'
        }, timer)).done(callback);
    },
    animateHigh = function (callback) {
        $.when($("#test").animate({
            height: '944px',
            width: '1044px',
            left: '50%',
            top: '380px'
        }, timer)).done(callback);
    };

function heartbeatloop() {
    animateLow(function () {
        animateHigh(heartbeatloop);
    });
}

heartbeatloop();

小提琴

更新
评论中要求的代码

var element = $("#test"),
    animate_timer = 1000, // duration of the animation
    beat = [{
        // method for animation
        method: function() {
            element.text("low");
            return element.animate({height:'977px',width:'1080px',left:'49.5%',top:'370px'},animate_timer);
        },
        // time after which the next animation should start
        timeout: 0
    }, {
        method: function() {
            element.text("normal");
            return element.animate({height:'944px',width:'1044px',left:'50%',top:'380px'},animate_timer);
        },
        timeout: 1000
    }, {
        method: function() {
            element.text("high");
            return element.animate({height:'995px',width:'1100px',left:'49.3%',top:'360px'},animate_timer);
        },
        timeout: 3000
    }
];

function beatIt(idx) {
    idx = idx || 0;

    $.when(beat[idx].method())     // start the animation
     .done(function() {            // when finished start the next step in <timeout> milliseconds
        setTimeout(function() {
            beatIt((idx + 1) % beat.length);    // next step with reset after last element
        }, beat[idx].timeout);
    });
}

beatIt();    // start the beating
于 2013-09-26T11:22:27.597 回答
1

setTimeout不承认函数名作为第三个参数。

看看这个。你不能用 setTimeout 神奇地循环:)

我建议您setInterval改用或使用闭包函数和适当的for循环。

于 2013-09-26T11:00:27.497 回答