在另一个函数完成后执行jQuery函数

use*_*249 39 jquery function

我希望在另一个自定义函数完成后执行自定义jQuery函数
第一个函数用于创建"打字"效果

function Typer()
{
    var srcText = 'EXAMPLE ';
    var i = 0;
    var result = srcText[i];
    setInterval(function() {
        if(i == srcText.length) {
            clearInterval(this);
            return;
        };
        i++;
        result += srcText[i].replace("\n", "<br />");
        $("#message").html( result);
    },
    100);

}
Run Code Online (Sandbox Code Playgroud)

第二个功能播放声音

function playBGM()
{
    document.getElementById('bgm').play();
}
Run Code Online (Sandbox Code Playgroud)

我一个接一个地调用函数

Typer();
playBGM();
Run Code Online (Sandbox Code Playgroud)

但是当文本被打字时声音开始播放.我只想在打字完成后播放声音.

这是我尝试过的:http://jsfiddle.net/GkUEN/5/

我怎样才能解决这个问题?

Pra*_*eep 64

您可以使用以下代码

$.when( Typer() ).done(function() {
       playBGM();
});
Run Code Online (Sandbox Code Playgroud)


Ion*_*zău 34

您应该使用回调参数:

function Typer(callback)
{
    var srcText = 'EXAMPLE ';
    var i = 0;
    var result = srcText[i];
    var interval = setInterval(function() {
        if(i == srcText.length - 1) {
            clearInterval(interval);
            callback();
            return;
        }
        i++;
        result += srcText[i].replace("\n", "<br />");
        $("#message").html(result);
    },
    100);
    return true;


}

function playBGM () {
    alert("Play BGM function");
    $('#bgm').get(0).play();
}

Typer(function () {
    playBGM();
});

// or one-liner: Typer(playBGM);
Run Code Online (Sandbox Code Playgroud)

因此,您传递一个函数作为参数(callback),该函数将在if之前调用return.

另外,是一篇关于回调的好文章.

的jsfiddle

  • 或者只是`Typer(playBGM);` (9认同)