我正在尝试创建一个模态框对象库,该库将创建并打开div、iframe、img等元素,类似于colorbox。我正在使用纯JavaScript实现,因此请不要推荐jQuery。
问题是,当用户使用`var myModal = new modal(options, width, height)`创建新的模态框时,我希望它能检查是否已经存在模态框,关闭它,等待关闭动画完成,然后继续创建新的模态框。我已经可以做到所有这些,但是我遇到了一个问题,即在旧模态框关闭之前,如何等待创建新模态框。我知道`webkitTransisionEnd`和触发自定义事件,但那不是问题所在。我需要实际的代码在旧模态框完成关闭之前等待,然后继续完成函数剩余部分,并且仍然向用户返回正确的对象。以下是我尝试过的一些方法:
- 创建一个`transisionEnd`监听器,等待动画结束,然后创建新模态框。(这有效,但考虑到它会变成一个嵌套函数,很难返回正确的对象)。 - 使用`try`,`catch`块。(这对我的目的没有用) - 使用无数种相同的变体,其中使用递归函数。
如果有人有想法,请随时发布。我尝试了很多东西,但显然还没有我需要的。谢谢。
编辑:
我已经找到了答案。我只需要将`transitionEnd`监听器附加到已经打开的模态框上,然后在类之外创建另一个函数,以相同的构造函数重新调用模态框。代码看起来有点像这样:
问题是,当用户使用`var myModal = new modal(options, width, height)`创建新的模态框时,我希望它能检查是否已经存在模态框,关闭它,等待关闭动画完成,然后继续创建新的模态框。我已经可以做到所有这些,但是我遇到了一个问题,即在旧模态框关闭之前,如何等待创建新模态框。我知道`webkitTransisionEnd`和触发自定义事件,但那不是问题所在。我需要实际的代码在旧模态框完成关闭之前等待,然后继续完成函数剩余部分,并且仍然向用户返回正确的对象。以下是我尝试过的一些方法:
- 创建一个`transisionEnd`监听器,等待动画结束,然后创建新模态框。(这有效,但考虑到它会变成一个嵌套函数,很难返回正确的对象)。 - 使用`try`,`catch`块。(这对我的目的没有用) - 使用无数种相同的变体,其中使用递归函数。
如果有人有想法,请随时发布。我尝试了很多东西,但显然还没有我需要的。谢谢。
编辑:
我已经找到了答案。我只需要将`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;
}