Pergunta

Não importa o método que eu uso para detectar o deslocamento na página do evento é acionado duas vezes.Por favor, veja o código para os métodos diferentes que eu tentei.

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

ou

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

ou

window.onscroll = please_scroll;

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

Eu até tentei usando $.debounce.

Em caso de qualquer utilização vou explicar o que eu estou tentando fazer:Quando o usuário rola a roda para cima ou para baixo, a página vai animar o deslocamento para o próximo largura de conteúdo da div.Eu tenho um código que é sucesso fazendo isso onclick do meu cardápio, mas eu também gostaria que isso aconteça conforme o usuário navega, essencialmente automático, auxiliando-as com a barra de rolagem para cada parte da minha página.Esta é a função que tem atualmente para o deslocamento:

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

Solução

muitos dispositivos podem disparar eventos de deslocamento que parece acontecer uma vez mais frequentemente.basta utilizar um limite de tempo para que:

var timeout;

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

você pode jogar com o valor de 50, eu recomendo algo entre 50 e 150.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top