2010-05-01 4 views
12

J'ai 1 page qui a 2 éléments DIV qui est montré/caché basé sur l'utilisateur cliquez sur les boutons d'action avec javascript, je voudrais basculer la mise à l'échelle sur le bouton d'action cliquez sur.Activer/désactiver le zoom sur Safari iPhone avec Javascript?

J'ai essayé avec ci-dessous javascript et il est en train de changer la fenêtre d'affichage, mais sans effet.

Des suggestions?

var ViewPortAllowZoom = 'width=device-width;'; 

var ViewPortNoZoom = 'width=device-width; initial-scale=1.0; maximum-scale=1.0; minimum-scale=1.0; user-scalable=no;'; 

    function AllowZoom(flag) { 
      if (flag == true) { 
       $('meta[name*=viewport]').attr('content', ViewPortAllowZoom);     
      } 
      else { 
       $('meta[name*=viewport]').attr('content', ViewPortNoZoom); 
      } 
     } 

Répondre

19

Retrait et re-ajouter la balise meta a fonctionné pour moi:

function AllowZoom(flag) { 
    if (flag == true) { 
    $('head meta[name=viewport]').remove(); 
    $('head').prepend('<meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=10.0, minimum-scale=1, user-scalable=1" />'); 
    } else { 
    $('head meta[name=viewport]').remove(); 
    $('head').prepend('<meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1, minimum-scale=1, user-scalable=0" />');    
    } 
} 

Cependant, si l'utilisateur effectue un zoom avant, puis passe à aucun zoom, la fenêtre reste zoomée et l'utilisateur ne peut plus changez le zoom. Quelqu'un at-il une solution pour cela?

+1

content = "width =" 960 forces pour rester à zoomée "out" sur la vue du portrait. –

+0

cela ne fonctionne pas sur le navigateur natif Android 4.2, si vous supprimez le zoom, vous ne pouvez pas le réactiver en restaurant les attributs de la balise meta comme dans cette fonction. – guari

7
$('body').bind('touchmove', function(event) { event.preventDefault() }); // turns off 

$('body').unbind('touchmove'); // turns on 
+0

+1 Certainement la solution la plus propre! – Novocaine

+0

cela ne désactive-t-il pas le défilement aussi? – maddrag0n

+0

maintenant je ne peux rien taper – zeion

0

Ce sont les étapes pour désactiver le zoom:

  1. votre PM Convaincre que la désactivation est une mauvaise idée (voir l'article ci-dessous).
  2. S'il le veut encore, le convaincre plus fort.
  3. S'il veut encore, lisez cet article et ajouter preventDefault à gesturestart comme expliqué dans un commentaire là-dedans: https://wouterdeschuyter.be/blog/how-to-disable-viewport-scaling-in-ios-10-you-dont-941140811

Il fonctionne dans l'iPhone 6 et ne bloque pas le défilement.

Merci pour le lien, Aloober: https://stackoverflow.com/a/41166167/1409261

Questions connexes