在第一个脚本完成后1秒结束脚本
End a script 1 second after the first scripts finishes
我想在另一个函数(handleScreen
)完成后运行动画函数。动画功能将在1秒后淡出部分页面。我尝试添加.promise
功能,但似乎不起作用。
handleScreen(mql).promise().done(function() {
setTimeout(function() {
$("#name,#splash").fadeOut("slow");
}, 1000);
});
你可以使用jquery Deferred
对象来解决这个问题:
handleScreen
创建一个$.Deferred
,它将被传递给动画函数。然后从这个延迟的承诺返回。
function handleScreen(mql) {
var def = $.Deferred();
mql.matches ? smallBlock(def) : largeBlock(def);
return def.promise();
}
动画函数在动画完成后将延迟标记为已解决(在最后一个动画上使用
TweenLite onComplete
参数):
function largeBlock(def) {
setTimeout(function () {
TweenLite.defaultEase = Linear.easeNone;
TweenLite.set('.square', { visibility: 'visible' });
var tl = new TimelineLite();
tl.fromTo('.l1', 2, { height: 0 }, { height: 227 });
tl.fromTo('.l2', 3, { width: 0, }, { width: 445 });
tl.fromTo('.l3', 2, { height: 0 }, { height: 227 });
tl.fromTo('.l4', 3, { width: 0 }, { width: 445, onComplete: def.resolve });
tl.timeScale(4);
}, 600);
}
在延迟完成后执行fadeOut:
handleScreen(mql).done(function() {
setTimeout(function() {
$("#name,#splash").fadeOut("slow");
}, 1000);
});
});
演示:https://jsfiddle.net/g5f7pex3/1/
用一种不同于你想象的方式解决问题的简单方法:
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/
简短的回答:你不可能自然地做到。长答案:使用间隔来检查标志,也不需要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);
});
相关文章:
- 在jQuery脚本中放置15秒的延迟
- Ajax发布到PHP脚本,每5秒查询一次MySQL数据库的性能/问题
- 从jquery脚本中删除秒
- InDesign CS5脚本:如何在“n”秒后打开和关闭弹出窗口
- 如何编写一个函数的脚本,为HTML中显示的JavaScript计数计时器添加秒数
- 调整秒表脚本以返回经过的分钟和秒数
- 当脚本运行时,它每秒将 4px 添加到我的容器的高度,只发生在 Firefox 中
- 使用 jQuery 每 xy 秒执行一次 PHP 脚本
- 如何使用Java脚本在5秒后打开新窗口
- 带有java脚本的实时时钟,显示实际的秒分和小时
- Spotfire Java脚本将字段拆分为唯一值,并每30秒更新一次MapChart可视化,以反映值的变化
- 使用php或java脚本或jquery在html页面上禁用所有超链接10秒
- 使用Ajax每X秒运行一个php脚本
- 为什么这个脚本在页面加载后3秒没有动画(jquery)
- Javascript每300秒运行一次脚本
- 尽管脚本只运行了40秒(并且在此之前运行了很长时间),但在GAS中超过了最大执行时间错误
- 执行javascript,然后每60秒刷新一次脚本
- 如何每十秒刷新一次PHP脚本
- 使用cron作业每秒执行一个脚本的替代方案
- 每10秒运行一次PHP脚本