Não consigo capturar o evento de rolagem em um iPad. Nada disso funciona, o que estou fazendo de errado?
window.onscroll=myFunction;
document.onscroll=myFunction;
window.attachEvent("scroll",myFunction,false);
document.attachEvent("scroll",myFunction,false);
Todos eles funcionam até mesmo no Safari 3 no Windows. Ironicamente, TODOS os navegadores no PC são compatíveis, window.onload=
caso você não se importe em destruir os eventos existentes. Mas não vá no iPad.
window.pageYOffset
e nãodocument.body.scrollTop||document.documentElement.scrollTop
como qualquer outro navegador / hardware existente.window.pageYOffset
não é atualizado na fase de desaceleração, mas apenas quando a rolagem termina.Para iOS, você precisa usar o evento touchmove , bem como o evento scroll como este:
fonte
Desculpe por adicionar outra resposta a uma postagem antiga, mas normalmente recebo um evento de rolagem muito bem usando este código (funciona pelo menos no 6.1)
E isso funciona para mim. A única coisa que ele não faz é fornecer um evento de rolagem para a desaceleração da rolagem (assim que a desaceleração for concluída, você obtém um evento de rolagem final, faça o que quiser com ele.) Mas se você desabilitar a inércia com css ao fazer isso
Você não fica com inércia em seus elementos, para o corpo, embora você possa ter que fazer o clássico
fonte
gesturechange
events não é padrão e é compatível apenas com Safari: developer.mozilla.org/en-US/docs/Web/Events/gesturechangeConsegui obter uma ótima solução para esse problema com iScroll, com a sensação de rolagem dinâmica e tudo mais https://github.com/cubiq/iscroll O documento do github é ótimo, e eu o segui na maior parte. Aqui estão os detalhes da minha implementação.
HTML: envolvi a área rolável do meu conteúdo em alguns divs que o iScroll pode usar:
CSS: Usei a classe Modernizr para "toque" para direcionar minhas alterações de estilo apenas para dispositivos de toque (porque eu só instanciei o iScroll no toque).
JS: Incluí iscroll-probe.js do download do iScroll e, em seguida, inicializei o scroller como abaixo, em que updatePosition é minha função que reage à nova posição de rolagem.
Você tem que usar myScroller para obter a posição atual agora, em vez de olhar para o deslocamento da rolagem. Aqui está uma função tirada de http://markdalgleish.com/presentations/embracingtouch/ (um artigo muito útil, mas um pouco desatualizado agora)
A única outra pegadinha era que ocasionalmente eu perdia parte da minha página que estava tentando acessar, e ela se recusava a rolar. Eu tinha que adicionar algumas chamadas a myScroller.refresh () sempre que alterava o conteúdo do #wrapper, e isso resolveu o problema.
EDIT: Outra pegadinha foi que o iScroll come todos os eventos de "clique". Ativei a opção de fazer com que o iScroll emita um evento de "toque" e lidei com eles em vez de eventos de "clique". Felizmente, não precisei de muitos cliques na área de rolagem, então isso não era grande coisa.
fonte
Desde que o iOS 8 foi lançado, esse problema não existe mais. O evento de rolagem agora é disparado sem problemas no iOS Safari também.
Portanto, se você registrar o
scroll
manipulador de eventos e verificarwindow.pageYOffset
dentro desse manipulador de eventos, tudo funcionará perfeitamente.fonte