Je travaille depuis peu sur une application web mobile. J'optimise le mobile d'abord, en me concentrant spécifiquement sur iOS pour l'iPhone en ce moment. Je ne veux pas avoir l'aspect précis d'une application native, mais je pense que le système d'exploitation de l'application est plus efficace. sentiment de d'être autochtone est d'une importance absolue. J'ai fait le balisage et le CSS pour refléter cette idée, ce qui me laisse avec ceci (annoté pour mieux comprendre le problème que je rencontre plus tard) :
Tout cela fonctionne sans problème, et il a également l'avantage d'avoir un aspect natif, avec un en-tête et un pied de page statiques, et une vue intérieure déroulante (grâce à -webkit-overflow-scrolling: touch
).
Comme toute personne ayant utilisé iOS pendant plus de 5 minutes le sait, lorsque vous faites défiler les pages vers le haut ou le bas, vous obtenez un défilement dynamique agréable. De même, lorsque vous atteignez le haut d'une liste, vous obtenez un bel effet de rebond :
J'ai l'impression que cela contribue à définir le sentiment d'iOS, et un si petit détail peut faire beaucoup. Heureusement, lorsque vous vous trouvez sous le haut d'une liste dans un élément défilable d'une application Web et que vous faites défiler la liste au-delà du haut, vous obtenez le même effet. C'est le comportement souhaité en action :
Cependant, lorsque vous êtes en haut de la liste, et que vous essayez de recréer le même comportement de rebond en haut de la liste (à la Setting.app, vue ci-dessus), nous obtenons le comportement suivant, c'est-à-dire non souhaité :
J'en ai vu similaire questions sur Stack Overflow, mais elles optent toutes pour la désactivation du rebond. Je me demande s'il est possible de continuez à rebondir, mais faites en sorte que cela se produise toujours sur body section section#main
et non sur le chrome de la webapp . Je n'utilise pas jQuery, je préférerais donc que les réponses soient en JavaScript pur et simple (points bonus pour une solution CSS, cependant).
Voici un Repo GitHub avec tout le code (Sinatra, HAML, et Sass ; la branche actuelle est so
), ou un JSFiddle avec des images et des liens cassés, mais montre le problème en question sur un iPhone (le mieux est de l'ajouter à l'écran d'accueil pour le tester).