不同时间的序列循环动画

时间:2014-07-05 15:55:22

标签: jquery animation

动画已经拍摄,但是我需要按照以下方式设置这个光环:

1) Visitor arrives - halo is completely off
2)After 1 second the halo flickers quickly (3-4 flickers) then is full bright (no flicker)
3) After 1 second we get  flicker again 2-3 flickers then returns to full bright.
4) Halo remains full bright - no cycling to 1

的jQuery

var haloRob = ".halo";

    function flash(){
        var del = Math.floor((Math.random()*300)+10);
        $(haloRob).toggleClass("display-halo").delay(del);
        $(haloRob).promise().done(function(){
            flash();
        });
    }

$(haloRob).animate({'marginTop': '27px', opacity: 1}, 1000, flash());

jsfiddle

1 个答案:

答案 0 :(得分:1)

让闪光灯倒计时,并在完成指定次数的开/关循环后调用回调。

JSFiddle:http://jsfiddle.net/TrueBlueAussie/A5YqV/7/

var haloRob = ".halo";

function flash(count, callback) {
    if (count > 0) {
        var del = Math.floor((Math.random() * 300) + 10);
        $(haloRob).toggleClass("display-halo").delay(del);
        $(haloRob).promise().done(function () {
            flash(count - 1, callback);
        });
    }
    else
    {
        if (callback) {
            callback();
        }
    }
}

$(haloRob).animate({
    'marginTop': '27px',
    opacity: 1
}, 1000, function () {
    flash(~~((Math.random() * 1 + 3)) * 2, function(){
        setTimeout(function(){flash(~~((Math.random() * 1 + 2)) * 2, function(){
            alert("done");
        });}, 1000);
    })
});

*注意:~~只是将浮点数转换为整数的简单方法。

*注意:随机计数必须加倍,以确保最终状态为" on"

代码可以进一步简化,但应该让你朝着正确的方向前进