【发布时间】:2023-03-24 04:31:01
【问题描述】:
我有一个用 Jquery 打开的模态框。当关闭按钮被调用时,模态框被关闭。一切正常,但是我打开和关闭模态框的次数越多,模态框关闭所需的时间就越长:
window.closeModal = function () {
modal = $("div.modal-overlay");
windowHeight = $(window).height();
// Until here performance is good
modal.animate({top: windowHeight, }, 800, function () {
// This is the problem
modal.hide();
$("body").css("overflow-y", "scroll");
});
}
我在每一行都放置了控制台日志,一切都会立即执行,直到我点击 modal.animate 函数。每次我打开一个模态框并按下关闭按钮时,modal.animate 开始执行需要更多时间。
谁能给点启示。
@编辑: 我创建了一个显示问题的 jsfiddle。
只需按下打开模式,然后关闭模式。这样做 4-5 次可以看到延迟变大
@@EDIT:发生了一些非常奇怪的事情。
虽然 openModal 执行了一次,但 iframe.load 执行了 # 次模态打开和关闭...
window.openModal = function (url) {
console.log("open start");
modal = $("div.modal-overlay");
modalIframe = $("div.modal-overlay iframe");
windowHeight = $(window).height();
modal.css("bottom", "0");
modalIframe.attr("src", url + "?frame=true");
modalIframe.load(function () {
console.log("open load")
modalIframe.css('height', windowHeight);
modal.show().animate({
top: 0,
}, 800, function () {
$("body").css("overflow-y", "hidden");
});
});
}
【问题讨论】:
-
尝试减少持续时间(800到400)以更快地完成动画..
-
大声笑@web2008 - 每次他这样做都需要更长的时间。这不仅太慢了!!
-
@Archer,没错。并不是动画被堆叠,因为动画在新的触发后很久就完成了。
-
能否在 jsfiddle 或 jsbin 中重现该问题?
-
你在开始另一个动画之前尝试过停止动画吗? api.jquery.com/stop
标签: jquery performance jquery-animate