Lorsque je lance mon application en mode portrait, cela fonctionne correctement. Ensuite, je tourne en paysage et il est agrandi. Pour le mettre à l'échelle correctement pour le mode paysage, je dois taper deux fois sur quelque chose deux fois, d'abord pour zoomer complètement (le comportement normal de double tap) et encore pour zoomer complètement (encore une fois, le comportement normal de double tap) . Lorsqu'il effectue un zoom arrière, il effectue un zoom arrière à la NOUVELLE échelle correcte pour le mode paysage.
Le retour au portrait semble fonctionner de manière plus cohérente; c'est-à-dire qu'il gère le zoom afin que l'échelle soit correcte lorsque l'orientation revient au portrait.
J'essaye de savoir s'il s'agit d'un bug? ou si c'est quelque chose qui peut être corrigé avec JavaScript?
Avec le méta-contenu de la fenêtre d'affichage, je mets l'échelle initiale à 1,0 et je ne mets PAS d'échelle minimale ou maximale (et je ne veux pas). Je règle la largeur sur la largeur de l'appareil.
Des idées? Je sais que beaucoup de gens seraient reconnaissants d'avoir une solution car cela semble être un problème persistant.
la source
Réponses:
Jeremy Keith ( @adactio ) a une bonne solution pour cela sur son blog Orientation et échelle
Gardez le balisage évolutif en ne définissant pas d'échelle maximale dans le balisage.
Désactivez ensuite l'évolutivité avec javascript au chargement jusqu'au démarrage du geste lorsque vous autorisez à nouveau l'évolutivité avec ce script:
Mise à jour 22-12-2014:
Sur un iPad 1, cela ne fonctionne pas, cela échoue sur l'écouteur d'événements. J'ai constaté que la suppression des
.body
correctifs qui:la source
maximum-scale=1.0
reste en vigueur après le début du geste. Est-ce qu'il y a un moyen de réparer ceci?Scott Jehl a proposé une solution fantastique qui utilise l'accéléromètre pour anticiper les changements d'orientation. Cette solution est très réactive et n'interfère pas avec les gestes de zoom.
https://github.com/scottjehl/iOS-Orientationchange-Fix
Source minifiée:
la source
J'ai eu le même problème et la définition de l'échelle maximale = 1.0 a fonctionné pour moi.
Modifier: comme mentionné dans les commentaires, cela désactive le zoom utilisateur, sauf lorsque le contenu dépasse la résolution de largeur. Comme mentionné, cela pourrait ne pas être sage. Cela peut également être souhaité dans certains cas.
Le code de la fenêtre:
la source
Si vous avez défini la largeur dans la fenêtre:
Et puis changez l'orientation, il fera parfois un zoom avant aléatoire (surtout si vous faites glisser sur l'écran) pour résoudre ce problème, ne définissez pas une largeur ici que j'ai utilisée:
Cela corrige le zoom quoi qu'il arrive, vous pouvez utiliser soit l'événement window.onorientationchange, soit si vous voulez qu'il soit indépendant de la plate-forme (pratique pour tester) la méthode window.innerWidth .
la source
MobileSafari prend en charge l'
orientationchange
événement sur l'window
objet. Malheureusement, il ne semble pas y avoir de moyen de contrôler directement le zoom via JavaScript. Vous pourriez peut-être écrire / modifier dynamiquement lameta
balise qui contrôle la fenêtre - mais je doute que cela fonctionne, cela n'affecte que l'état initial de la page. Vous pourriez peut-être utiliser cet événement pour redimensionner votre contenu à l'aide de CSS. Bonne chance!la source
J'ai créé une démonstration fonctionnelle d'une mise en page paysage / portrait, mais le zoom doit être désactivé pour que cela fonctionne sans JavaScript:
http://matthewjamestaylor.com/blog/ipad-layout-with-landscape-portrait-modes
la source
J'utilise cette fonction dans mon projet.
donc juste addEventListener:
la source
J'ai trouvé une nouvelle solution de contournement, différente de toutes les autres que j'ai vues, en désactivant le zoom iOS natif et en implémentant à la place la fonctionnalité de zoom dans JavaScript.
Sérgio Lopes fournit une excellente base sur les diverses autres solutions au problème de zoom / orientation: une correction du célèbre bug de zoom iOS sur le changement d'orientation en portrait .
Il pourrait être amélioré, mais pour mes besoins, il évite les inconvénients majeurs qui se produisent avec toutes les autres solutions que j'ai vues. Jusqu'à présent, je ne l'ai testé qu'en utilisant Safari mobile sur un iPad 2 avec iOS4.
La mise au point () / flou () est une solution de contournement pour éviter le blocage occasionnel de la fonctionnalité de zoom qui peut se produire après avoir changé d'orientation et zoomé plusieurs fois.
La définition du document.body.style oblige à repeindre en plein écran, ce qui évite des problèmes intermittents occasionnels où le repeinture échoue gravement après le zoom.
la source
Elisabeth, vous pouvez modifier le contenu de la fenêtre de manière dynamique en ajoutant la propriété "id" au méta-étiquette:
Ensuite, vous pouvez simplement appeler par javascript:
la source
Voici une autre façon de le faire, qui semble bien fonctionner.
Définissez la balise Meta pour restreindre la fenêtre à scale = 1, ce qui empêche le zoom:
<meta name = "viewport" content = "width = device-width, initial-scale = 1, minimum-scale = 1, maximum-scale = 1">
Avec javascript, modifiez la balise meta 1/2 seconde plus tard pour autoriser le zoom:
setTimeout (function () {document.querySelector ("meta [name = viewport]"). setAttribute ('content', 'width = device-width, initial-scale = 1');}, 500);
Encore une fois avec javascript, lors du changement d'orientation, rechargez la page:
window.onorientationchange = function () {window.location.reload ();};
Chaque fois que vous réorientez l'appareil, la page se recharge, initialement sans zoom. Mais 1/2 seconde plus tard, la possibilité de zoomer est rétablie.
la source
J'ai trouvé un correctif très facile à mettre en œuvre. Définissez le focus sur un élément de texte qui a une taille de police de 50 px à la fin du formulaire. Cela ne semble pas fonctionner si l'élément de texte est masqué, mais le masquage de cet élément se fait facilement en définissant les propriétés de couleur des éléments pour ne pas avoir d'opacité.
la source