gpt4 book ai didi

javascript - "Disallow"当另一个正在执行 jQuery 时执行一个事件

转载 作者:行者123 更新时间:2023-11-29 10:20:34 25 4
gpt4 key购买 nike

我有两个事件:一个是 onclick,当我单击菜单时它会滚动到某个 div,另一个是 onscroll 中的“突出显示”菜单项当滚动条靠近 div 时。

我的问题是:如何在执行一个事件时“禁止”执行另一个事件。

这是我的代码:

function goToByScroll(id){
var value = $(id).offset().top;
var scrl = value - 154;
$('html,body').animate({
scrollTop: scrl},
'slow');
}

//scroll menu control
$("#menu-home ul li a").click(function(e) {
e.preventDefault();
$("#menu-home ul li a").removeClass('menu-home-active');
$(this).addClass('menu-home-active');
goToByScroll($(this).attr("href"));
});

//scroll bar control
$(window).scroll(function() {
var scrv = $(this).scrollTop();
var allmenu = $("#menu-home ul li a");
if(scrv == 0){
allmenu.removeClass('menu-home-active');
$('#menu-div1').addClass('menu-home-active');
}
if(scrv > 458 && scrv < 478){
allmenu.removeClass('menu-home-active');
$('#menu-div2').addClass('menu-home-active');
}
if(scrv > 989 && scrv < 1009){
allmenu.removeClass('menu-home-active');
$('#menu-div3').addClass('menu-home-active');
}
if(scrv >= 1324){
allmenu.removeClass('menu-home-active');
$('#menu-div4').addClass('menu-home-active');
}
});

谢谢

最佳答案

首先;当滚动事件发生时(或相反),点击事件未触发。当您到达滚动事件时,点击事件已经完成。

您可能应该做的是像这样在点击事件上设置一个变量:

function goToByScroll(id) {
window.isAutoScrolling = true;
var value = $(id).offset().top;
var scrl = value - 154;
$('html,body').animate({scrollTop: scrl}, 'slow', goToByScrollCompleted);
}
function goToByScrollCompleted() {
window.isAutoScrolling = false;
}

然后你添加到滚动事件的开始:

if(window.isAutoScrolling) return;

此外,至于注册 goToByScrollCompleted,这可能可以通过多种方式完成,但是,因为我不知道你是如何进行滚动的,所以我不能说。

关于javascript - "Disallow"当另一个正在执行 jQuery 时执行一个事件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12916177/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com