Je travaille sur une application basée sur un navigateur, actuellement je développe et stylise pour le navigateur iPad Safari.
Je recherche deux choses sur l'ipad: Comment puis-je désactiver le défilement vertical pour les pages qui n'en ont pas besoin? & comment puis-je désactiver l'effet de rebond élastique?
Réponses:
Cette réponse n'est plus applicable, sauf si vous développez pour un très ancien appareil iOS ... Veuillez voir d'autres solutions
Réponse de 2011: pour une application web / html exécutée dans iOS Safari, vous voulez quelque chose comme
Pour iOS 5, vous voudrez peut-être prendre en compte les éléments suivants: document.ontouchmove et défilement sur iOS 5
Mise à jour de septembre 2014: Une approche plus approfondie peut être trouvée ici: https://github.com/luster-io/prevent-overscroll . Pour cela et de nombreux conseils utiles sur les applications Web, consultez
http://www.luster.io/blog/9-29-14-mobile-web-checklist.htmlMise à jour de mars 2016: ce dernier lien n'est plus actif - voir https://web.archive.org/web/20151103001838/http://www.luster.io/blog/9-29-14-mobile-web-checklist .html pour la version archivée à la place. Merci @falsarella pour l'avoir signalé.
la source
onTouchMove: function(e) { e.stopPropagation(); e.stopImmediatePropagation(); }
Cela empêchera l'événement de toucher le corps, mais le corps restera non rebondissant. Edit: Cela suppose que vous définissez $ ('div'). On ('touchmove', ... onTouchMove);Vous pouvez également modifier la position du corps / html en fixe:
la source
Pour éviter le défilement sur les navigateurs mobiles modernes, vous devez ajouter le passif: false. J'avais arraché mes cheveux pour que cela fonctionne jusqu'à ce que je trouve cette solution. Je n'ai trouvé cela mentionné qu'à un autre endroit sur Internet.
la source
{ passive: false }
ça ne marche certainement pas !!! Bienvenue sur StackOverflow mecoverflow-y: scroll
? Par exemple, avoir un modal avec une hauteur de vue plus haute que le corps.Vous pouvez utiliser cet extrait de code jQuery pour ce faire:
Cela bloquera le défilement vertical et tout effet de rebond se produisant sur vos pages.
la source
Sur le conteneur, vous pouvez définir un effet de rebond à l'intérieur de l'élément
Source: http://www.kylejlarson.com/blog/2011/fixed-elements-and-scrolling-divs-in-ios-5/
la source
overflow:hidden
sur le<body>
, c'est toujours la meilleure solution. Cependant, lors de l'ouverture du clavier ou du glissement sur le bas de l'écran, cela ne fonctionnera plus.Je sais que c'est un peu hors piste, mais j'utilise Swiffy pour convertir Flash en un jeu HTML5 interactif et j'ai rencontré le même problème de défilement, mais je n'ai trouvé aucune solution qui fonctionnait.
Le problème que j'avais était que la scène Swiffy occupait tout l'écran, donc dès qu'il était chargé, l'événement touchmove du document n'était jamais déclenché.
Si j'essayais d'ajouter le même événement au conteneur Swiffy, il était remplacé dès que la scène était chargée.
En fin de compte, je l'ai résolu (plutôt désordonné) en appliquant l'événement touchmove à chaque DIV de la scène. Comme ces divs étaient également en constante évolution, je devais continuer à les vérifier.
C'était ma solution, qui semble bien fonctionner. J'espère que cela sera utile pour quiconque essaie de trouver la même solution que moi.
la source
Code pour supprimer ipad safari: désactiver le défilement et l'effet de rebond
Si vous avez une balise canvas à l'intérieur du document, cela affectera parfois la convivialité de l'objet dans Canvas (exemple: mouvement de l'objet); alors ajoutez le code ci-dessous pour le réparer.
la source
Essayez ce sollutuion JS :
Empêche le défilement par défaut de Safari et les mouvements de rebond sans détacher vos écouteurs d'événements tactiles.
la source
aucune des solutions ne fonctionne pour moi. Voilà comment je fais.
la source
Testé sur iPhone. Utilisez simplement ce css sur le conteneur de l'élément cible et cela changera le comportement de défilement, qui s'arrête lorsque le doigt quitte l'écran.
https://developer.mozilla.org/en-US/docs/Web/CSS/-webkit-overflow-scrolling
la source
Pour ceux qui utilisent MyScript l'application Web et ont du mal à faire défiler / glisser le corps (sur iPad et tablettes) au lieu d'écrire:
<body touch-action="none" unresolved>
Cela a réglé le problème pour moi.
la source
Vous pouvez utiliser js pour empêcher le défilement:
Et que de simplement exécuter / arrêter
toggleScroll
func lorsque vous ouvrez / fermez modal.Comme ça
toggleScroll(true) / toggleScroll(false)
(Ceci est uniquement pour iOS, sur Android ne fonctionne pas)
la source
Essayez cette solution JS qui change de
webkitOverflowScrolling
style. L'astuce ici est que ce style est désactivé, Safari mobile passe au défilement ordinaire et empêche le sur-rebond - hélas, il n'est pas capable d'annuler le glissement en cours. Cette solution complexe suit égalementonscroll
lorsque le rebond sur le dessus rend lescrollTop
négatif qui peut être suivi. Cette solution a été testée sur iOS 12.1.1 et présente un seul inconvénient: lors de l'accélération du défilement, un sur-rebond unique se produit toujours, car la réinitialisation du style peut ne pas l'annuler immédiatement.la source
réponse améliorée @Ben Bos et commentée par @Tim
Ce css aidera à éviter les problèmes de défilement et de performances avec le rendu css car la position a changé / peu de retard sans largeur et hauteur
la source
Pour ceux d'entre vous qui ne veulent pas se débarrasser du rebond mais simplement savoir quand il s'arrête (par exemple pour commencer un calcul des distances d'écran), vous pouvez faire ce qui suit (le conteneur est l'élément conteneur qui déborde):
la source
Désactiver l'effet de défilement de rebond safari:
la source
Similaire au kiwi en colère, je l'ai fait fonctionner en utilisant la hauteur plutôt que la position:
la source
Solution testée, fonctionne sur iOS 12.x
C'est le problème que je rencontrais:
Pendant que je fais défiler ma galerie, le corps défile toujours lui-même (le balayage humain n'est pas vraiment horizontal), cela rend ma galerie inutile.
Voici ce que j'ai fait pendant que ma galerie commence à défiler
Et quand ma galerie termine son défilement ...
J'espère que cela aide ~
la source