Eu estou trabalhando em um aplicativo baseado em navegador, atualmente estou desenvolvendo e estilizando o navegador ipad safari.
Estou procurando duas coisas no ipad: Como posso desativar a rolagem vertical para páginas que não exigem isso? e como posso desativar o efeito de ressalto elástico?
ipad
scroll
mobile-safari
bounce
Adão
fonte
fonte
Respostas:
Esta resposta não é mais aplicável, a menos que você esteja desenvolvendo para um dispositivo iOS muito antigo ... Consulte outras soluções
Resposta de 2011: para um aplicativo web / html em execução no iOS Safari, você deseja algo como
Para o iOS 5, convém levar o seguinte em consideração: document.ontouchmove e rolagem no iOS 5
Atualização em setembro de 2014: Uma abordagem mais completa pode ser encontrada aqui: https://github.com/luster-io/prevent-overscroll . Para isso e muitos conselhos úteis sobre aplicativos da web, consulte
http://www.luster.io/blog/9-29-14-mobile-web-checklist.htmlAtualização em março de 2016: esse último link não está mais ativo - consulte https://web.archive.org/web/20151103001838/http://www.luster.io/blog/9-29-14-mobile-web-checklist .html para a versão arquivada. Obrigado @falsarella por apontar isso.
fonte
onTouchMove: function(e) { e.stopPropagation(); e.stopImmediatePropagation(); }
Isso impedirá que o evento atinja o corpo, mas o corpo permanecerá não-saltitante. Edit: Isso pressupõe que você defina $ ('div'). On ('touchmove', ... onTouchMove);Você também pode alterar a posição do corpo / html para fixo:
fonte
Para impedir a rolagem em navegadores móveis modernos, você deve adicionar o passivo: false. Eu estava puxando meu cabelo para fazer isso funcionar até encontrar essa solução. Eu só encontrei isso mencionado em outro lugar na internet.
fonte
{ passive: false }
ele definitivamente não está funcionando !!! Bem-vindo ao StackOverflow caraoverflow-y: scroll
? Por exemplo, ter um modal com uma altura de vista mais alta que o corpo.Você pode usar este trecho de código jQuery para fazer isso:
Isso bloqueará a rolagem vertical e também qualquer efeito de retorno nas suas páginas.
fonte
No contêiner, você pode definir o efeito de rejeição dentro do elemento
Fonte: http://www.kylejlarson.com/blog/2011/fixed-elements-and-scrolling-divs-in-ios-5/
fonte
overflow:hidden
o<body>
, essa ainda é a melhor solução. No entanto, ao abrir o teclado ou deslizar pela parte inferior da tela, ele não funcionará mais.Sei que isso está um pouco fora de pista, mas tenho usado o Swiffy para converter o Flash em um jogo interativo em HTML5 e me deparei com o mesmo problema de rolagem, mas não encontrei soluções que funcionassem.
O problema que tive foi que o estágio Swiffy estava ocupando a tela inteira; assim, assim que foi carregado, o evento touchmove do documento nunca foi acionado.
Se eu tentasse adicionar o mesmo evento ao contêiner Swiffy, ele seria substituído assim que o palco fosse carregado.
No final, eu o resolvi (de maneira bastante confusa) aplicando o evento touchmove a cada DIV dentro do palco. Como esses divs também estavam em constante mudança, eu precisava continuar verificando-os.
Esta foi a minha solução, que parece funcionar bem. Espero que seja útil para qualquer pessoa que tente encontrar a mesma solução que eu.
fonte
Código para remover o ipad safari: desative a rolagem e o efeito de rejeição
Se você tiver uma marca de tela dentro do documento, em algum momento isso afetará a usabilidade do objeto dentro do Canvas (exemplo: movimento do objeto); adicione o código abaixo para corrigi-lo.
fonte
Tente esta solução JS :
Impede a rolagem padrão do Safari e gestos de rejeição sem desconectar os ouvintes de eventos de toque.
fonte
nenhuma das soluções funciona para mim. É assim que eu faço.
fonte
Testado no iphone. Basta usar este css no contêiner de elemento de destino e ele mudará o comportamento de rolagem, que para quando o dedo sai da tela.
https://developer.mozilla.org/en-US/docs/Web/CSS/-webkit-overflow-scrolling
fonte
Para aqueles que usam o MyScript, o Web App, e estão lutando com o corpo rolando / arrastando (no iPad e no Tablets), em vez de realmente escrever:
<body touch-action="none" unresolved>
Isso consertou para mim.
fonte
Você pode usar js para impedir a rolagem:
E do que apenas executar / parar a
toggleScroll
função quando você abre / fecha o modal.Como isso
toggleScroll(true) / toggleScroll(false)
(Isso é apenas para iOS, no Android não está funcionando)
fonte
Experimente esta solução JS que alterna o
webkitOverflowScrolling
estilo. O truque aqui é que esse estilo está desativado, o Safari móvel vai para a rolagem comum e evita o excesso de salto - infelizmente, não é possível cancelar o arrasto em andamento. Essa solução complexa também rastreia,onscroll
pois o salto por cima tornascrollTop
negativos que podem ser rastreados. Esta solução foi testada no iOS 12.1.1 e tem uma única desvantagem: enquanto a aceleração do deslocamento único de rolagem ainda acontece, a redefinição do estilo pode não ser cancelada imediatamente.fonte
resposta melhorada @Ben Bos e comentado por @Tim
Esse css ajudará a evitar problemas de rolagem e desempenho com a re-renderização do css, pois a posição foi alterada / pouco atrasada sem largura e altura
fonte
Para aqueles que não querem se livrar da rejeição, mas apenas para saber quando ela pára (por exemplo, para iniciar um cálculo das distâncias da tela), você pode fazer o seguinte (container é o elemento de container transbordando):
fonte
Desative o efeito de rolagem de retorno do safari:
fonte
Semelhante ao kiwi zangado, consegui fazê-lo usando a altura em vez da posição:
fonte
Solução testada, funciona no iOS 12.x
Este é um problema que eu estava encontrando:
Enquanto eu rolar minha galeria, o corpo sempre se desloca (o furto humano não é realmente horizontal), o que torna minha galeria inútil.
Aqui está o que eu fiz enquanto minha galeria começou a rolar
E quando minha galeria terminar sua rolagem ...
Espero que isso ajude ~
fonte