我正在尝试制作一个模态对象库,它将创建并打开一个div,iframe,img,类似于colorbox。我在纯JavaScript中这样做,所以请不要推荐jQuery。
问题是,当用户使用var myModal = new modal(options,width,height)创建一个新模态时,我希望它检查一个模态是否已经存在,关闭它,等待关闭动画,然后继续创建新模态。我已经可以做任何事了,但是我有一个问题等着创建新的模态,直到旧模态消失。我知道webkitTransisionEnd并触发自定义事件,但这不是问题。我需要实际代码等到旧模态完成关闭,直到它继续完成函数的其余部分并仍然将正确的对象返回给用户。以下是我尝试过的一些事情:
如果有人有想法,请随时发布。我尝试了很多东西,但显然不是我需要做的一件事。感谢。
编辑:
我能够弄清楚。我所要做的就是将一个transitionEnd监听器附加到已经打开的模态,然后在类之外创建一个额外的函数,然后调用具有相同构造函数的模态。代码看起来有点像这样:
function create(options, width, height) {
return new modal(options, width, height);
}
function modal(options, width, height) {
if (modal != null) {
modal.close();
modal.addEventListener('webkitTransitionEnd', function() {
create(options,width,height);
});
}
return;
}
答案 0 :(得分:1)
在某些未来事件发生之前,您不能使代码等待(例如,暂停执行当前执行的线程)。 Javascript根本不支持或以这种方式工作。除了alert()
之类的几个模态函数之外,它没有办法阻止当前执行的线程。
您可以使用回调来通知某些未来事件的调用代码。但是,调用代码将注册其回调并立即返回并继续执行,因此必须编写调用代码来处理回调实现。
如果您正在尝试在图书馆内完成所有工作,那么它应该不那么艰难。当调用者创建新模态时,您只需检查预先存在的模态对话框。如果一个人没有起来,你就照常进行。如果有一个,那么你用前一个注册回调通知,存储构造函数的内容,但实际上不创建新的模式对话框。然后,当你的回调被调用以指示先前的模态对话框已经完成时,你就完成了新的模态。
如果这些模态对话框都是您自己创建的,那么您需要对它们实施完成通知,以便在它们关闭时,它们可以通知任何侦听器它们现在已完成。如果他们使用动画关闭并且您希望等待关闭通知直到动画完成,那么您也可以实现它。如果您正在使用CSS3动画,那么您似乎已经知道,您可以使用transtionEnd事件来了解动画何时完成,或者您是否知道动画的时间并且您不需要精确定义ms,也可以使用setTimeout()
来了解动画完成时的近似值。
答案 1 :(得分:1)
var animationDuration = 1000;
setTimeout(function(){
// Animation done!
}, animationDuration);