【发布时间】:2021-08-28 02:09:22
【问题描述】:
我有一个导航栏,可以导航到某个区块。当我在按钮上单击几次时,在滚动到正确的 div 后,当我尝试自己向上滚动时,滚动事件表单导航栏将我滚动到 div 的时间与我单击导航项的时间一样多。
function goToByScroll(id) {
closeSidebar();
const elem = $("body").find(`[data-el=${id}]`);
$('html, body').animate({
scrollTop: $(elem).offset().top
}, 600);
return false;
}
$("#mySidenav > a, #mySidenavMob > a, a").click(function (e) {
// e.preventDefault();
const dataAtrr = $(this).attr("data-id");
if (dataAtrr) goToByScroll(dataAtrr);
});
我应该如何避免这种情况?
【问题讨论】:
-
你应该设置一个动画正在进行的标志并在
closeSidebar()之前检查它,如果为真则立即返回,如果为假,则将其设置为真。然后在回调中将其设置为 false,您可以传入 animate 方法,该方法将在 animation is complete 时调用。 -
@MatJ 不需要标志,jquery 已经内置了它:
if ($("body").is(":animated")) return;(或者,也许更好,用.finish()取消之前的动画) -
@freedomn-m,从来不知道。谢谢
-
@MatJ 别担心,我们使用我们所知道的
-
真的感谢大家 if ($("body").is(":animated")) return;工作
标签: javascript html jquery