在第一个脚本完成后1秒结束脚本

时间:2015-08-13 20:56:56

标签: javascript jquery

我希望在另一个函数(handleScreen)完成后运行动画函数。动画功能将在1秒后淡出部分页面。我尝试添加.promise函数,但这似乎不起作用。

https://jsfiddle.net/Dar_T/eqdk82ru/1/

handleScreen(mql).promise().done(function() {
setTimeout(function() {
        $("#name,#splash").fadeOut("slow");
     }, 1000);
});

2 个答案:

答案 0 :(得分:5)

一种简单的方法,以与您想到的不同的方式解决问题:

var alreadyFaded = false;
function FadeSplash()
{
    if(alreadyFaded == false){
       //prevent this from running a second time
       alreadyFaded = true;
       $("#name,#splash").fadeOut("slow");
    }
}

$(function () {
    //do something

    //make the fade happen upon finishing if it hasn't already
    FadeSplash();
});


$(function () {
    //by default, the fade will happen after 5 seconds if FadeSplash()
    //wasn't already called by the above function.
    $("#splash,#name").show(), setTimeout(function () {
        FadeSplash();
    }, 5000)
});

这是一个工作的JSFiddle,用于演示: https://jsfiddle.net/tthhaft1/

答案 1 :(得分:3)

简短的回答:你不能自然地做到这一点。长答案:使用间隔检查标志,也就是说,不需要准备2个文件:

$(document).ready(function () {
    var finished = false;
    SOME FUNCTION
    //Inside SOME FUNCTION do your stuff, and before returning or whatever it is doing:
    var intervalCheck = setInterval(function () {
        if (finished) {
            //Do your stuff you need to do after those 5 secs.
            clearInterval(intervalCheck);
        }
    }, 1000);

    $("#splash,#name").show(), setTimeout(function () {
        $("#name,#splash").fadeOut("slow")
        finished = true;
    }, 5000);
});