Comment utiliser jQuery pour déterminer la taille de la fenêtre du navigateur et pour le redétecter si la page est redimensionnée? J'ai besoin de faire une taille IFRAME dans cet espace (venant un peu sur chaque marge).
Pour ceux qui ne le savent pas, la fenêtre d'affichage du navigateur n'est pas de la taille du document / de la page. C'est la taille visible de votre fenêtre avant le défilement.
Réponses:
Pour obtenir la largeur et la hauteur de la fenêtre:
redimensionner l'événement de la page:
la source
innerWidth
/innerHeight
est plus correct à utiliser (couvrant le zoom).DOCTYPE
déclaration appropriée , par exemple<!DOCTYPE html>
.Vous pouvez essayer les unités de fenêtre (CSS3):
Prise en charge du navigateur
la source
1. Réponse à la question principale
Le script
$(window).height()
fonctionne bien (montrant la hauteur de la fenêtre d'affichage et non le document avec une hauteur de défilement), MAIS il a besoin que vous placiez correctement la balise doctype dans votre document, par exemple ces doctypes:Pour HTML 5:
<!DOCTYPE html>
Pour HTML4 de transition:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
Le doctype par défaut supposé par certains navigateurs est probablement celui qui
$(window).height()
prend la hauteur du document et non la hauteur du navigateur. Avec la spécification doctype, elle est résolue de manière satisfaisante, et je suis sûr que vos peps éviteront de "changer le débordement de défilement en caché puis en arrière", ce qui est, je suis désolé, un truc un peu sale, surtout si vous ne le faites pas '' t le documenter sur le code pour une utilisation future par le programmeur.2. Un conseil supplémentaire, notez à côté: De plus, si vous faites un script, vous pouvez inventer des tests pour aider les programmeurs à utiliser vos bibliothèques, permettez-moi d'en inventer quelques-uns:
$ (document) .ready (fonction () {});EDIT: à propos de la partie 2, "Un conseil supplémentaire, notez à côté": @Machiel, dans le commentaire d'hier (2014-09-04), était TOTALement raison: le chèque du $ ne peut pas être à l'intérieur de l'événement prêt de Jquery, parce que nous supposons, comme il l'a souligné, que $ est déjà défini. MERCI D'AVOIR INDIQUÉ CELA, et veuillez faire plaisir au reste d'entre vous, corrigez cela, si vous l'avez utilisé dans vos scripts. Ma suggestion est: dans vos bibliothèques, mettez une fonction "install_script ()" qui initialise la bibliothèque (mettez toute référence à $ à l'intérieur de cette fonction init, y compris la déclaration de ready ()) et AU DÉBUT de cette fonction "install_script ()" , vérifiez si le $ est défini, mais rendez tout indépendant de JQuery, afin que votre bibliothèque puisse se "diagnostiquer" lorsque JQuery n'est pas encore défini. Je préfère cette méthode plutôt que de forcer la création automatique d'un JQuery en l'apportant à partir d'un CDN. Ce sont de minuscules notes de côté pour aider d'autres programmeurs. Je pense que les gens qui font des bibliothèques doivent être plus riches dans les retours sur les erreurs des programmeurs potentiels. Par exemple, Google Apis a besoin d'un manuel supplémentaire pour comprendre les messages d'erreur. C'est absurde, d'avoir besoin d'une documentation externe pour quelques petites erreurs qui ne nécessitent pas que vous alliez chercher un manuel ou une spécification. La bibliothèque doit être AUTO-DOCUMENTEE. J'écris du code même en prenant soin des erreurs que je pourrais commettre dans six mois à partir de maintenant, et il essaie toujours d'être un code propre et non répétitif, déjà écrit pour éviter les futures erreurs de développement. Je pense que les gens qui font des bibliothèques doivent être plus riches dans les retours sur les erreurs des programmeurs potentiels. Par exemple, Google Apis a besoin d'un manuel supplémentaire pour comprendre les messages d'erreur. C'est absurde, d'avoir besoin d'une documentation externe pour quelques petites erreurs qui ne nécessitent pas que vous alliez chercher un manuel ou une spécification. La bibliothèque doit être AUTO-DOCUMENTEE. J'écris du code même en prenant soin des erreurs que je pourrais commettre dans six mois à partir de maintenant, et il essaie toujours d'être un code propre et non répétitif, déjà écrit pour empêcher les futures erreurs de développement. Je pense que les gens qui font des bibliothèques doivent être plus riches dans les retours sur les erreurs des programmeurs potentiels. Par exemple, Google Apis a besoin d'un manuel supplémentaire pour comprendre les messages d'erreur. C'est absurde, d'avoir besoin d'une documentation externe pour quelques petites erreurs qui ne nécessitent pas que vous alliez chercher un manuel ou une spécification. La bibliothèque doit être AUTO-DOCUMENTEE. J'écris du code même en prenant soin des erreurs que je pourrais commettre dans six mois à partir de maintenant, et il essaie toujours d'être un code propre et non répétitif, déjà écrit pour empêcher les futures erreurs de développement. Vous n'avez pas besoin d'aller chercher un manuel ou une spécification. La bibliothèque doit être AUTO-DOCUMENTEE. J'écris du code même en prenant soin des erreurs que je pourrais commettre dans six mois à partir de maintenant, et il essaie toujours d'être un code propre et non répétitif, déjà écrit pour empêcher les futures erreurs de développement. Vous n'avez pas besoin d'aller chercher un manuel ou une spécification. La bibliothèque doit être AUTO-DOCUMENTEE. J'écris du code même en prenant soin des erreurs que je pourrais commettre dans six mois à partir de maintenant, et il essaie toujours d'être un code propre et non répétitif, déjà écrit pour empêcher les futures erreurs de développement.
la source
$
après avoir déjà utilisé le$
pour appeler$(document).ready(function() { } );
. C'est bien si vous vérifiez si jQuery est disponible, mais à ce stade, il est déjà trop tard.Vous pouvez utiliser $ (window) .resize () pour détecter si la fenêtre est redimensionnée.
jQuery n'a aucune fonction pour détecter de manière cohérente la largeur et la hauteur correctes de la fenêtre [1] lorsqu'une barre de défilement est présente.
J'ai trouvé une solution qui utilise la bibliothèque Modernizr et en particulier la fonction mq qui ouvre les requêtes multimédias pour javascript.
Voici ma solution:
Ma réponse n'aidera probablement pas à redimensionner une iframe à une largeur de fenêtre de 100% avec une marge de chaque côté, mais j'espère que cela apportera un réconfort aux développeurs Web frustrés par l'incohérence du navigateur quant au calcul de la largeur et de la hauteur de la fenêtre de visualisation javascript.
Cela pourrait peut-être aider en ce qui concerne l'iframe:
[1] Vous pouvez utiliser $ (window) .width () et $ (window) .height () pour obtenir un nombre qui sera correct dans certains navigateurs, mais incorrect dans d'autres. Dans ces navigateurs, vous pouvez essayer d'utiliser window.innerWidth et window.innerHeight pour obtenir la largeur et la hauteur correctes, mais je déconseille cette méthode car elle reposerait sur le reniflement de l'agent utilisateur.
Habituellement, les différents navigateurs ne sont pas cohérents quant à l'inclusion ou non de la barre de défilement dans la largeur et la hauteur de la fenêtre.
Remarque: $ (window) .width () et window.innerWidth varient selon les systèmes d'exploitation utilisant le même navigateur. Voir: https://github.com/eddiemachado/bones/issues/468#issuecomment-23626238
la source
la source
Pour obtenir la taille de la fenêtre d'affichage au chargement et au redimensionnement (basé sur la réponse de SimaWB):
la source
Veuillez noter que les unités de fenêtre CSS3 (vh, vw) ne fonctionneraient pas bien sur iOS Lorsque vous faites défiler la page, la taille de la fenêtre est en quelque sorte recalculée et votre taille d'élément qui utilise des unités de fenêtre augmente également. Donc, en fait, un peu de javascript est requis.
la source