Actuellement , Twitter Bootstrap 3 a les points d'arrêt réactifs suivants: 768px, 992px et 1200px, représentant respectivement des appareils petits, moyens et grands.
Comment puis-je détecter ces points d'arrêt à l'aide de JavaScript?
Je souhaite écouter avec JavaScript tous les événements liés déclenchés lorsque l'écran change. Et pour pouvoir détecter si l'écran est destiné aux appareils petits, moyens ou grands.
Y a-t-il quelque chose déjà fait? Quelles sont vos suggestions?
javascript
twitter-bootstrap-3
dom-events
Rubens Mariuzzo
la source
la source
<div class="d-none d-?-block"></div>
visibilité change (insérez votre point d'arrêt souhaité). Ces classes CSS sont pour Bootstrap 4 ... utilisent tout ce qui fonctionne dans Bootstrap 3. Beaucoup plus performant que d'écouter l'événement de redimensionnement de la fenêtre.Réponses:
Edit: Cette bibliothèque est maintenant disponible via Bower et NPM. Voir le dépôt github pour plus de détails.
RÉPONSE MIS À JOUR:
Avertissement: je suis l'auteur.
Voici quelques choses que vous pouvez faire en utilisant la dernière version (Responsive Bootstrap Toolkit 2.5.0):
Depuis la version 2.3.0, vous n'avez pas besoin des quatre
<div>
éléments mentionnés ci-dessous.RÉPONSE ORIGINALE:
Je ne pense pas que vous ayez besoin d'un énorme script ou d'une bibliothèque pour cela. C'est une tâche assez simple.
Insérez les éléments suivants juste avant
</body>
:Ces 4 divs vous permettent de vérifier le point d'arrêt actuellement actif. Pour une détection JS facile, utilisez la fonction suivante:
Maintenant, pour effectuer une certaine action uniquement sur le plus petit point d'arrêt que vous pourriez utiliser:
Détecter les changements une fois que le DOM est prêt est également assez simple. Tout ce dont vous avez besoin est un écouteur de redimensionnement de fenêtre léger comme celui-ci:
Une fois que vous en êtes équipé, vous pouvez commencer à écouter les changements et exécuter des fonctions spécifiques aux points d'arrêt comme ceci:
la source
Si vous n'avez pas de besoins spécifiques, vous pouvez simplement le faire:
Edit: Je ne vois pas pourquoi vous devriez utiliser une autre bibliothèque js alors que vous pouvez le faire uniquement avec jQuery déjà inclus dans votre projet Bootstrap.
la source
$(window).bind('resize')
... mais il y a d'autres événements liés à l'orientation de l'écran mobile qui ont un impact sur la dimension de l'écran..on('resize')
Avez-vous jeté un œil à Response.js? Il est conçu pour ce genre de chose. Combinez Response.band et Response.resize.
http://responsejs.com/
la source
Vous pouvez utiliser la taille de la fenêtre et coder en dur les points d'arrêt. Utilisation angulaire:
la source
Détecter le point d'arrêt réactif de Twitter Bootstrap 4.1.x à l'aide de JavaScript
Le Bootstrap v.4.0.0 (et la dernière version Bootstrap 4.1.x ) a présenté les mises à jour les options de grille , de sorte que le vieux concept de la détection ne peut pas être appliqué directement (voir les instructions de migration ):
sm
niveau de grille ci-dessous768px
pour un contrôle plus granulaire. Nous avons maintenantxs
,sm
,md
,lg
etxl
;xs
les classes de grille ont été modifiées pour ne pas nécessiter l'infixe.J'ai écrit la petite fonction utilitaire qui respecte un nom de classe de grille mis à jour et un nouveau niveau de grille:
Détecter le point d'arrêt réactif de Bootstrap v4-beta à l'aide de JavaScript
Le v4-alpha Bootstrap et Bootstrap v4 bêta ont une approche différente sur des points d' arrêt de la grille, voici donc le chemin de l' héritage d'atteindre le même:
Je pense que ce serait utile, car il est facile à intégrer à n'importe quel projet. Il utilise des classes d'affichage natives réactives du Bootstrap lui-même.
la source
Voici ma propre solution simple:
jQuery:
VanillaJS:
la source
Il est préférable d' utiliser cette approche avec Response.js . Response.resize se déclenche à chaque redimensionnement de fenêtre où le croisement ne sera déclenché que si le point d'arrêt est modifié
la source
Il ne devrait y avoir aucun problème avec une implémentation manuelle comme celle mentionnée par @oozic.
Voici quelques bibliothèques que vous pouvez consulter:
Notez que ces bibliothèques sont conçues pour fonctionner indépendamment du bootstrap, de la fondation, etc. Vous pouvez configurer vos propres points d'arrêt et vous amuser.
la source
Vous voudrez peut-être l'ajouter à votre projet d'amorçage pour vérifier visuellement le point d'arrêt actif
Voici le BOOTPLY
la source
S'appuyant sur la réponse de Maciej Gurban (ce qui est fantastique ... si vous aimez ça, votez simplement sa réponse). Si vous créez un service à interroger, vous pouvez renvoyer le service actuellement actif avec la configuration ci-dessous. Cela pourrait remplacer entièrement d'autres bibliothèques de détection de points d'arrêt (comme enquire.js si vous insérez certains événements). Notez que j'ai ajouté un conteneur avec un ID aux éléments DOM pour accélérer la traversée du DOM.
HTML
COFFEESCRIPT (AngularJS, mais c'est facilement convertible)
JAVASCRIPT (AngularJS)
la source
Au lieu d'utiliser $ (document) .width (), vous devriez définir une règle CSS qui vous donne ces informations.
Je viens d'écrire un article pour l'obtenir avec précision. Voir ici: http://www.xurei-design.be/2013/10/how-to-accurately-detect-responsive-breakpoints/
la source
Pourquoi ne pas simplement utiliser jQuery pour détecter la largeur css actuelle de la classe de conteneur bootstrap?
c'est à dire..
Vous pouvez également utiliser $ (window) .resize () pour empêcher votre mise en page de «salir le lit» si quelqu'un redimensionne la fenêtre du navigateur.
la source
Au lieu d'insérer ce qui suit plusieurs fois dans chaque page ...
Utilisez simplement JavaScript pour l'insérer dynamiquement dans chaque page (notez que je l'ai mis à jour pour fonctionner avec Bootstrap 3 avec
.visible-*-block
:la source
Je n'ai pas assez de points de réputation à commenter, mais pour ceux qui rencontrent des problèmes pour être «non reconnus» lorsqu'ils essaient d'utiliser le ResponsiveToolKit de Maciej Gurban, j'obtiens également cette erreur jusqu'à ce que je remarque que Maciej fait référence à la boîte à outils du bas de la page page dans son CodePen
J'ai essayé de faire ça et tout à coup ça a marché! Alors, utilisez le ResponsiveToolkit mais mettez vos liens en bas de page:
Je ne sais pas pourquoi cela fait une différence, mais c'est le cas.
la source
Voici une autre façon de détecter la fenêtre courante sans mettre les numéros de taille de la fenêtre dans votre javascript.
Voir les extraits de code CSS et javascript ici: https://gist.github.com/steveh80/288a9a8bd4c3de16d799
Après avoir ajouté ces extraits à vos fichiers css et javascript, vous pouvez détecter la fenêtre d'affichage actuelle comme suit:
Si vous souhaitez détecter une plage de fenêtres, utilisez-la comme ceci
la source
Le CSS de Bootstrap pour la
.container
classe ressemble à ça:Cela signifie donc que nous pouvons compter en toute sécurité
jQuery('.container').css('width')
pour détecter les points d'arrêt sans les inconvénients de se fierjQuery(window).width()
.Nous pouvons écrire une fonction comme celle-ci:
Et puis testez-le comme
la source
var cssWidth = parseInt( jQuery('.container').css('width') );
Deuxièmement, utilisez des plagesif ( cssWidth < 768) { return 'xs'; } else if (cssWidth >= 768 && cssWidth <= 992) { return 'sm'; } else if (cssWidth > 992 && cssWidth <= 1200) { return 'md'; } else { return 'lg'; }
Utilisez CSS
:before
etcontent
propriété pour imprimer l'état du point d'arrêt dans le<span id="breakpoint-js">
afin que le JavaScript n'ait qu'à lire ces données pour les transformer en variable à utiliser dans votre fonction.(exécutez l'extrait pour voir l'exemple)
REMARQUE: j'ai ajouté quelques lignes de CSS pour utiliser le
<span>
comme indicateur rouge dans le coin supérieur de mon navigateur. Assurez-vous simplement de le réactiverdisplay:none;
avant de publier vos contenus.la source
J'ai créé une méthode native jQuery pour la détection de la taille de l'écran Twitter Bootstrap. Voici:
JSFillde: https://jsfiddle.net/pstepniewski/7dz6ubus/
JSFillde comme exemple plein écran: https://jsfiddle.net/pstepniewski/7dz6ubus/embedded/result/
la source
Pour toute personne intéressée par cela, j'ai écrit une détection de point d'arrêt basée sur des points d'arrêt CSS en utilisant TypeScript et Observables. il n'est pas très difficile d'en faire ES6, si vous supprimez les types. Dans mon exemple, j'utilise Sass, mais il est également facile de le supprimer.
Voici mon JSFiddle: https://jsfiddle.net/StefanJelner/dorj184g/
HTML:
SCSS:
Manuscrit:
J'espère que cela aide quelqu'un.
la source
Bootstrap4 avec jQuery, solution simplifiée
la source
Je n'étais pas vraiment satisfait des réponses données, qui me paraissent trop compliquées à utiliser, j'ai donc rédigé ma propre solution. Cependant, pour le moment, cela repose sur le trait de soulignement / lodash pour fonctionner.
https://github.com/LeShrimp/GridSizeEvents
Vous pouvez l'utiliser comme ceci:
Cela fonctionne immédiatement pour Bootstrap 3, car les points d'arrêt sont codés en dur à 768px, 992px et 1200px. Pour les autres versions, vous pouvez facilement adapter le code.
En interne, cela utilise matchMedia () et devrait donc garantir de produire des résultats synchronisés avec Bootstrap.
la source
Peut-être que cela aidera certains d'entre vous, mais il existe un plugin qui vous aide à détecter sur quel point d'arrêt Bootstrap v4 actuel vous voyez: https://www.npmjs.com/package/bs-breakpoints
Simple à utiliser (peut être utilisé avec ou sans jQuery):
la source
Voici ma solution (Bootstrap 4):
la source
Pour tous ceux qui utilisent knockout.js , je voulais des propriétés observables knockout.js qui me diraient quand les points d'arrêt sont atteints. J'ai choisi d'utiliser le support de Modernizr pour les requêtes multimédias de style css afin que les nombres correspondent aux définitions de bootstrap, et pour bénéficier des avantages de compatibilité de modernizr. Mon modèle de vue knockout est le suivant:
la source
Voici un bon moyen de le détecter (peut-être drôle, mais fonctionne) et vous pouvez utiliser l'élément nécessaire pour que le code soit clair:
Exemple: css:
et dans le document par jQuery:
bien sûr, la propriété css est any.
la source
Puisque bootstrap 4 sera bientôt disponible, j'ai pensé partager une fonction qui le prend en charge (xl est maintenant une chose) et effectue un jQuery minimal pour faire le travail.
la source
Bootstrap 4
ou minifié
la source
Si vous utilisez Knockout , vous pouvez utiliser la liaison personnalisée suivante pour lier le point d'arrêt de la fenêtre actuelle (xs, sm, md ou lg) à une observable dans votre modèle. La reliure ...
divs
avecvisible-??
classe dans un div avec iddetect-viewport
et l'ajoute au corps s'il n'existe pas déjà (vous pouvez donc réutiliser cette liaison sans dupliquer ces divs)la source
Cela fait un moment depuis l'OP, mais voici ma solution pour cela en utilisant Bootstrap 3. Dans mon cas d'utilisation, je ne ciblais que les lignes, mais la même chose pourrait être appliquée au conteneur, etc.
Changez simplement .row à ce que vous voulez.
la source