События window.scroll запускаются дважды - программирование
Подтвердить что ты не робот

События window.scroll запускаются дважды

Независимо от того, какой метод я использую для обнаружения прокрутки на странице, событие запускается дважды. Пожалуйста, ознакомьтесь с кодом для различных методов, которые я пробовал.

<body onmousewheel="alert('Why are you alerting twice?')">

или

<script src="js/jquery-1.8.3.min.js"></script>
<script>
$(window).scroll(function(){
    alert("Why are you alerting twice?");
});
</script>

или

window.onscroll = please_scroll;

function please_scroll() {
      alert("Why are you alerting twice?");
    }

Я даже пытался использовать $.debounce.

В случае, если это будет полезно, я объясню, что я пытаюсь сделать: Когда пользователь прокручивает колесо вверх или вниз, страница будет анимировать прокрутку до следующего полноразмерного содержимого div. У меня есть код, который успешно делает это onclick моего меню, но мне также хотелось бы, чтобы это произошло, когда пользователь прокручивает, по существу, автоматически помогает им прокручивать каждую часть моей страницы. Это функция, которую я сейчас использую для прокрутки:

function scrollTo(id){
  // Scroll
  $('html,body').animate({scrollTop: $("#"+id).offset().top - 110},'slow',function(){
    animation_active = "false";
  });
}
4b9b3361

Ответ 1

многие устройства могут запускать события прокрутки, которые, как представляется, происходят чаще. просто используйте таймаут для этого:

var timeout;

$(window).scroll(function() {
    clearTimeout(timeout);  
    timeout = setTimeout(function() {
        // do your stuff
    }, 50);
});

вы можете играть со значением 50, я рекомендую что-то между 50 и 150.