IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

JavaScript Discussion :

Viewport et barre d'adresse


Sujet :

JavaScript

  1. #1
    kap
    kap est déconnecté
    Membre confirmé
    Inscrit en
    Octobre 2005
    Messages
    188
    Détails du profil
    Informations forums :
    Inscription : Octobre 2005
    Messages : 188
    Par défaut Viewport et barre d'adresse
    Bonjour à tous,

    Je dois faire du responsive design pour adapter un site à l'affichage sur smartphones. Pour l'instant je m'intéresse seulement au comportement sous IPhone.
    J'ai une iframe dans ma page HTML qui contient une carte Google Maps. Mon but est est que ma page entière tienne sur l'écran (difficulté de scroller avec le doigt si on est sur la carte...). Pour faire ça, je calcule la hauteur de l'iframe en fonction du viewport.
    Pour des raisons de lisibilité, je veux aussi que la barre d'adresse ne s'affiche pas.

    J'arrive plus ou moins à faire ça. Mon problème se situe au changement d'orientation de portrait à paysage. Le viewport ne prend pas en compte la barre d'adresse ce qui fait planter mes calculs...
    Voici le code concerné :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    function fnGetHeight() {
    		var viewportwidth;
    		var viewportheight;
    		// The more standards compliant browsers (mozilla/netscape/opera/chrome/IE7) use window.innerWidth and window.innerHeight
    		if (typeof window.innerWidth != 'undefined') {
    			viewportwidth = window.innerWidth;
    			viewportheight = window.innerHeight;			
    		}
     
    		// IE6 in standards compliant mode (i.e. with a valid doctype as the first line in the document)
    		else if (typeof document.documentElement != 'undefined' && typeof document.documentElement.clientWidth != 'undefined' && document.documentElement.clientWidth != 0) {
    			viewportwidth = document.documentElement.clientWidth;
    			viewportheight = document.documentElement.clientHeight;
    		}
    		// older versions of IE
    		else {
    			viewportwidth = document.getElementsByTagName('body')[0].clientWidth;
    			viewportheight = document.getElementsByTagName('body')[0].clientHeight;
    		}
    		//alert('Your viewport width & height is ' + viewportwidth + 'x' + viewportheight);
    		return viewportheight;
    	}
     
    	function resize(h) {
    		alert("h: " + h);
    		banner = document.getElementById("logo_gauche").firstChild.height;
    		alert(banner);
    		var valeur1 = h;
    		alert("valeur1: " + valeur1);
    		document.getElementById("carte").height = valeur1 + "px";
    	}	
     
    function bob(){
    		if(!window.pageYOffset){ hideAddressBar(); }
    		resize(fnGetHeight());
    	}
     
    	window.addEventListener("orientationchange", bob);
    	window.addEventListener("onresize", bob);
    La page web se trouve ici.

    Merci d'avence pour votre aide !!

  2. #2
    Modérateur

    Avatar de NoSmoking
    Homme Profil pro
    Inscrit en
    Janvier 2011
    Messages
    17 201
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Isère (Rhône Alpes)

    Informations forums :
    Inscription : Janvier 2011
    Messages : 17 201
    Par défaut
    Bonjour,
    j'ai un peu de mal à comprendre la notion de "barre d'adresse".

    As tu essayé les media queries ?

  3. #3
    kap
    kap est déconnecté
    Membre confirmé
    Inscrit en
    Octobre 2005
    Messages
    188
    Détails du profil
    Informations forums :
    Inscription : Octobre 2005
    Messages : 188
    Par défaut
    Bonjour,

    Merci pour ta réponse. Désolé pour les explications pas très compréhensibles

    Par barre d'adresse, j'entends la barre du navigateur (Safari) où l'on peut taper l'URL et faire des recherches. J'adapte bien mon CSS avec des media queries, sauf pour l'iframe où je le gère en JavaScript.
    Je n'arrive pas à faire cohabiter les deux codes JavaScript :
    * celui qui cache la barre du navigateur
    * celui qui spécfie la taille de l'iframe

    Est-ce que c'est plus compréhensible?

  4. #4
    Rédacteur/Modérateur

    Avatar de SylvainPV
    Profil pro
    Inscrit en
    Novembre 2012
    Messages
    3 375
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2012
    Messages : 3 375
    Par défaut
    On ne peut pas cacher la barre d'adresses (URL), elle fait partie du navigateur du client. Néanmoins avec quelques hacks, le plus connu étant de scroller à 1px du bord de la page en Javascript, on peut parvenir à faire en sorte qu'elle soit masquée à l'ouverture de la page.

    Peux-tu nous montrer le code de la fonction hideAdressBar() ?

  5. #5
    kap
    kap est déconnecté
    Membre confirmé
    Inscrit en
    Octobre 2005
    Messages
    188
    Détails du profil
    Informations forums :
    Inscription : Octobre 2005
    Messages : 188
    Par défaut
    Oups, pardon, je pensais l'avoir mis dans le premier message... Effectivement, c'est ce que fait le code que j'ai trouvé : un scroll d'un pixel.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    	function hideAddressBar(){
    		if(!window.location.hash){
    			if(document.height < window.outerHeight){
    				document.body.style.height = (window.outerHeight + 50) + 'px';
    			}
    			setTimeout( function(){ window.scrollTo(0, 1); }, 50 );
    		}
    	}

  6. #6
    Rédacteur/Modérateur

    Avatar de SylvainPV
    Profil pro
    Inscrit en
    Novembre 2012
    Messages
    3 375
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2012
    Messages : 3 375
    Par défaut
    Bon il y a peu de chances que tu parviennes à masquer automatiquement la barre d'URL à tous les coups, mais essaie quand même ceci :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    function hideAddressBar() {
          window.scrollTo(0, 1);
    }
     
    function bob(){
          resize(fnGetHeight());
          setTimeout(hideAddressBar, 0);                
    }
     
    addEventListener("orientationchange", bob);
    addEventListener("resize", bob);
    addEventListener("load", bob);

  7. #7
    kap
    kap est déconnecté
    Membre confirmé
    Inscrit en
    Octobre 2005
    Messages
    188
    Détails du profil
    Informations forums :
    Inscription : Octobre 2005
    Messages : 188
    Par défaut
    Merci pour ta proposition.

    J'ai effectué les modifications que tu m'as conseillé mais ça ne convient pas tout à fait :
    * lors du load, l'iframe se met à la bonne taille
    * mais ensuite, je repasse deux fois dans le calcul de la taille de l'iframe, et au final, il calcule une taille plus grande. Du coup mon iframe ne tient pas en entier sur l'écran, ce qui est gênant puisqu'un bouton contenu dans l'iframe n'est alors pas visible.

  8. #8
    Rédacteur/Modérateur

    Avatar de SylvainPV
    Profil pro
    Inscrit en
    Novembre 2012
    Messages
    3 375
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2012
    Messages : 3 375
    Par défaut
    Il faut dire que le redimensionnement en dur en Javascript, ce n'est pas top pour une approche responsive. As-tu essayé toutes les solutions en CSS uniquement ? Par exemple width:100% couplé à max-height: 100% ? Ou alors deux media-queries, une pour chaque orientation.

  9. #9
    Expert confirmé
    Avatar de sekaijin
    Homme Profil pro
    Urbaniste
    Inscrit en
    Juillet 2004
    Messages
    4 205
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Urbaniste
    Secteur : Santé

    Informations forums :
    Inscription : Juillet 2004
    Messages : 4 205
    Par défaut
    comme toujours je demande
    A quoi ça sert d'essayer de tenter de passer outre les choix de l'utilisateur quant à son navigateur ?

    avec WebKit je te fais un anvigateur MacOS en moins de 3 minutes
    tu n'auras alors aucun moyen de maitriser quoi que ce soit.

    le navigateur c'est l'outil du client
    le document c'est l'espace mise à disposition du web développeur

    chancun chez soit.

    A+JYT

  10. #10
    kap
    kap est déconnecté
    Membre confirmé
    Inscrit en
    Octobre 2005
    Messages
    188
    Détails du profil
    Informations forums :
    Inscription : Octobre 2005
    Messages : 188
    Par défaut
    Bonjour,

    Je reviens sur ce sujet après avoir du travailler sur un autre projet :

    @SylvainPV : j'effectue déjà plueisuers media queries pour gérer les deux orentations. Le code CSS a été réalisé par quelqu'un d'autre. Il n'avait pas trouvé de solutions pur CSS pour gérer ça. C'est pour cette raison qu'on a opté pour un code javascript de calcul de viewport.

    @sekajin : je veux juste masquer la barre d'adresse à l'affichage pour que la carte soit plus grande. L'utilisateur peut tout à fait la réafficher quand il le souhaite.

  11. #11
    kap
    kap est déconnecté
    Membre confirmé
    Inscrit en
    Octobre 2005
    Messages
    188
    Détails du profil
    Informations forums :
    Inscription : Octobre 2005
    Messages : 188
    Par défaut
    Apparemment le hack pour masquer la barre d'adresse ne fonctionne plus avec la nouvelle version de Safarie IOS 7 : http://www.mobilexweb.com/blog/safar...ms-apis-review . Du coup je vais conserver mon script pour resizer en fonction du viewport

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Sécuriser barre d'adresses IE
    Par bendj dans le forum Général JavaScript
    Réponses: 6
    Dernier message: 09/11/2005, 08h04
  2. Affichage URL dans la barre d'adresse
    Par NicoNGRI dans le forum Balisage (X)HTML et validation W3C
    Réponses: 5
    Dernier message: 06/09/2005, 14h11
  3. changer l'icone d'une page dans la barre d'adresse/bookmark
    Par Draganthyr dans le forum Webdesign & Ergonomie
    Réponses: 2
    Dernier message: 10/06/2005, 16h03
  4. Reprendre une date dans la barre d'adresse.
    Par kmayoyota dans le forum ASP
    Réponses: 32
    Dernier message: 03/09/2004, 08h46
  5. [jsp][jetty]recuperer l'url dans la barre d'adresse
    Par maxvador dans le forum Servlets/JSP
    Réponses: 4
    Dernier message: 07/06/2004, 14h33

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo