Estou procurando algo nesse sentido:
$(window).scroll(function(event){
if (/* magic code*/ ){
// upscroll code
} else {
// downscroll code
}
});
Alguma ideia?
javascript
jquery
Zach
fonte
fonte
wheel
evento atualmente: stackoverflow.com/a/33334461/3168107 .Respostas:
Verificar atual
scrollTop
x anteriorscrollTop
fonte
lastScrollTop
em 0 ou será inicializado corretamente?var lastScrollTop = $(window).scrollTop()
após o navegador atualizar a posição de rolagem no carregamento da página.Você pode fazer isso sem ter que acompanhar a parte superior da rolagem anterior, pois todos os outros exemplos exigem:
Como não sou especialista nisso, sinta-se à vontade para pesquisar mais, mas parece que, quando você usa
$(element).scroll
, o evento que está sendo ouvido é um evento de 'rolagem'.Mas se você ouvir especificamente um
mousewheel
evento usando bind, ooriginalEvent
atributo do parâmetro de evento no seu retorno de chamada conterá informações diferentes. Parte dessa informação éwheelDelta
. Se for positivo, você moveu a roda do mouse para cima. Se for negativo, você moveu o botão do mouse para baixo.Meu palpite é que os
mousewheel
eventos serão acionados quando a roda do mouse virar, mesmo que a página não role; um caso em que os eventos de 'rolagem' provavelmente não são acionados. Se desejar, você pode ligarevent.preventDefault()
na parte inferior do seu retorno de chamada para impedir a rolagem da página e usar o evento roda do mouse para algo diferente de uma rolagem da página, como algum tipo de funcionalidade de zoom.fonte
scrollTop
não foi atualizada. De fato,$(window).scroll()
não disparou nada.Armazene o local de rolagem anterior e verifique se o novo é maior ou menor que isso.
Aqui está uma maneira de evitar qualquer variável global ( violino disponível aqui ):
fonte
Solução existente
Poderia haver 3 soluções desta postagem e outras respostas .
Solução 1
Solução 2
Solução 3
Teste Multi Navegador
Não pude testá-lo no Safari
chrome 42 (vitória 7)
Firefox 37 (versão 7)
IE 11 (Vitória 8)
IE 10 (vitória 7)
IE 9 (vitória 7)
IE 8 (vitória 7)
Solução combinada
No teste de vários navegadores, decidi usar a Solução 3 para navegadores comuns e a Solução 1 para o Firefox e o IE 11.
Eu indiquei esta resposta para detectar o IE 11.
fonte
Safari browser
, seria útil complementar a solução.Entendo que já houve uma resposta aceita, mas queria postar o que estou usando, caso isso possa ajudar alguém. Eu recebo a direção como
cliphex
no evento mousewheel, mas com suporte ao Firefox. É útil fazê-lo dessa maneira, caso esteja fazendo algo como bloquear a rolagem e não conseguir obter o topo da rolagem atual.Veja uma versão ao vivo aqui .
fonte
Evento de rolagem
O evento de rolagem se comporta de maneira estranha no FF (é disparado várias vezes devido à rolagem de suavidade), mas funciona.
Nota: O evento de rolagem é acionado ao arrastar a barra de rolagem, usando as teclas do cursor ou a roda do mouse.
Evento de roda
Você também pode dar uma olhada no MDN, que expõe ótimas informações sobre o evento Wheel .
Nota: O evento wheel é acionado apenas ao usar o mousewheel ; teclas do cursor e arrastar a barra de rolagem não acionam o evento.
Li o documento e o exemplo: Ouvindo esse evento no navegador
e depois de alguns testes com FF, IE, chrome, safari, acabei com este trecho:
fonte
Caso você queira apenas saber se você rola para cima ou para baixo usando um dispositivo apontador (mouse ou track pad), pode usar a propriedade deltaY do
wheel
evento.fonte
ou use a extensão da roda do mouse , veja aqui .
fonte
Eu já vi muitas versões de boas respostas aqui, mas parece que algumas pessoas estão tendo problemas entre navegadores, então essa é a minha correção.
Eu usei isso com sucesso para detectar a direção no FF, IE e Chrome ... Não testei no safari, pois normalmente uso o Windows.
Lembre-se de que eu também uso isso para interromper a rolagem. Portanto, se você deseja que a rolagem ainda ocorra, remova o
e.preventDefault(); e.stopPropagation();
fonte
Para ignorar qualquer pressão / momento / retorno na parte superior e inferior da página, aqui está uma versão modificada da resposta aceita de Josiah :
fonte
Você pode determinar a direção do mousewhell.
fonte
Use isso para encontrar a direção da rolagem. Isso é apenas para encontrar a direção do Rolagem Vertical. Suporta todos os navegadores cruzados.
Exemplo
fonte
este código funciona bem com o IE, Firefox, Opera e Chrome:
'wheel mousewheel' e a propriedade deltaY devem ser usadas na função bind () .
Lembre-se: seu usuário deve atualizar o sistema e os navegadores por motivos de segurança. Em 2018, as desculpas de "Eu tenho o IE 7" são um absurdo. Nós devemos educar os usuários.
Tenha um bom dia :)
fonte
Mantenha super simples:
Caminho do jQuery Event Listener:
Maneira de ouvinte de evento do Vanilla JavaScript:
A função permanece a mesma:
Eu escrevi um post mais aprofundada sobre ele aqui
fonte
Você pode usar as opções de rolagem e roda do mouse para rastrear o movimento para cima e para baixo ao mesmo tempo.
Você pode substituir 'corpo' por (janela) também.
fonte
Para estocar um incremento no
.data ()
elemento rolado, você poderá testar o número de vezes que o rolagem alcançou o topo.fonte
Por que ninguém usa o
event
objeto retornado pelojQuery
scroll?Estou usando
chromium
e não verifiquei em outros navegadores se eles têm adir
propriedade.fonte
Como
bind
foi preterido na v3 ("substituído poron
") ewheel
agora é suportado , esqueçawheelDelta
:wheel
Compatibilidade do navegador do evento nos MDNs (2019-03-18) :fonte
if(e.originalEvent.deltaY > 0) { console.log('down'); } else if(e.originalEvent.deltaY < 0) { console.log('up'); } else if(e.originalEvent.deltaX > 0) { console.log('right'); } else if(e.originalEvent.deltaX < 0) { console.log('left'); }
touchmove
evento de uso móvel .Você pode usar isso também
fonte
no
.data()
elemento você pode armazenar um JSON e testar valores para ativar eventosfonte
Essa é uma detecção simples e fácil para quando o usuário rolar para fora da parte superior da página e para quando voltar para o topo.
fonte
Esta é uma solução ideal para detectar a direção exatamente quando o usuário termina a rolagem.
fonte
Você deve tentar isso
fonte
Tive problemas com a rolagem elástica ( deslocamento da rolagem, bandas de borracha). Ignorar o evento de rolagem para baixo, se próximo ao topo da página, funcionou para mim.
fonte
Isso funciona em todos os navegadores de PC ou telefone, expandindo as principais respostas. Pode-se construir uma janela de objeto de evento mais complexa ["scroll_evt"] e chamá-la na função handleScroll (). Este dispara para 2 condições simultâneas, se um certo atraso tiver passado ou um certo delta for passado para eliminar alguns disparos indesejados.
fonte