Pour moi, le petit est beau, alors j'utilise cette technique :
Dans le fichier CSS :
/* Smartphones ----------- */
@media only screen and (max-width: 760px) {
#some-element { display: none; }
}
Dans le fichier jQuery/JavaScript :
$( document ).ready(function() {
var is_mobile = false;
if( $('#some-element').css('display')=='none') {
is_mobile = true;
}
// now I can use is_mobile to run javascript conditionally
if (is_mobile == true) {
//Conditional script here
}
});
Mon objectif était que mon site soit "mobile-friendly". J'utilise donc les requêtes CSS Media Queries pour afficher/masquer les éléments en fonction de la taille de l'écran.
Par exemple, dans ma version mobile, je ne veux pas activer la case "J'aime" de Facebook, car elle charge toutes ces images de profil et autres. Et ce n'est pas bon pour les visiteurs mobiles. Donc, en plus de masquer l'élément conteneur, je le fais également dans le bloc de code jQuery (ci-dessus) :
if(!is_mobile) {
(function(d, s, id) {
var js, fjs = d.getElementsByTagName(s)[0];
if (d.getElementById(id)) return;
js = d.createElement(s); js.id = id;
js.src = "//connect.facebook.net/pt_PT/all.js#xfbml=1&appId=210731252294735";
fjs.parentNode.insertBefore(js, fjs);
}(document, 'script', 'facebook-jssdk'));
}
Vous pouvez le voir en action à http://lisboaautentica.com
Je suis toujours en train de travailler sur la version mobile, donc elle n'a pas encore l'apparence qu'elle devrait avoir, au moment où j'écris ces lignes.
Mise à jour par dekin88
Il existe une API JavaScript intégrée pour la détection des médias. Plutôt que d'utiliser la solution ci-dessus, utilisez simplement ce qui suit :
$(function() {
let isMobile = window.matchMedia("only screen and (max-width: 760px)").matches;
if (isMobile) {
//Conditional script here
}
});
Navigateur pris en charge : http://caniuse.com/#feat=matchmedia
L'avantage de cette méthode est qu'elle est non seulement plus simple et plus courte, mais aussi que vous pouvez, si nécessaire, cibler séparément différents appareils tels que les smartphones et les tablettes, sans avoir à ajouter d'éléments factices dans le DOM.
8 votes
Fournissez une URL mobile spécifiquement destinée aux appareils mobiles. C'est ainsi que la plupart des grands sites gèrent les appareils mobiles. Voir m.google.com .
6 votes
JQuery ne fait pas, et ne peut pas faire tout. Il permet de traverser et de manipuler le DOM d'un navigateur à l'autre, de réaliser des animations simples et d'utiliser l'ajax d'un navigateur à l'autre, et crée un squelette sur lequel les plugins peuvent s'appuyer. Veuillez être conscient des limites de jQuery avant de poser votre question. spécifiquement pour une solution jQuery.
1 votes
Je viens de remarquer que Modernizr prend en charge les Media Queries de type CSS3 : modernizr.com/docs/#mq
87 votes
Les agents utilisateurs sont des cibles en constante évolution, tous ceux qui lisent cet article devraient se méfier du reniflage des agents utilisateurs.
57 votes
Qu'est-ce qu'un appareil "mobile" ? Est-ce un appareil qui prend en charge le tactile (y compris les Chrome Pixel et les ordinateurs portables Windows 8 avec souris) ? S'agit-il d'un appareil doté d'un petit écran (qu'en est-il des iPads retina) ? S'agit-il d'un appareil doté d'un processeur lent ? Ou un appareil avec une connexion Internet lente ? La réponse à cette question varie en fonction de ce que vous voulez faire. Il est facile de cibler la résolution de l'écran ou le toucher. En revanche, il n'y a pas de solution miracle si vous souhaitez proposer un contenu plus petit ou un JS moins intensif pour certains appareils. Testez window.navigator.connection et revenez à la détection de l'agent utilisateur (c'est très mauvais, très mal conseillé). Mes deux centimes.
0 votes
@DavidGilbertson Pourquoi une connexion internet lente en ferait-elle un appareil mobile ? Pour ce que vous en savez, je pourrais utiliser une connexion internet par satellite (ex : Google Loon) pour mon réseau domestique.
5 votes
@Cole "Cole9 "Johnson C'est exactement ce que je pense. Le terme " mobile " semble être utilisé comme un terme générique pour désigner le tactile, les processeurs lents, les réseaux lents et les petits écrans. Mais aucune de ces hypothèses n'est parfaite. Je pense qu'en les considérant individuellement, on obtiendra un meilleur produit qu'en concevant pour un vague concept de " mobile ". C'est pourquoi j'ai posé cette question à l'OP.
1 votes
@DavidGilbertson Pour moi, le terme "mobile" englobe les téléphones, les iPods et tout ce qui tient vraiment dans la poche. Un NetBook (si vous vous souvenez de ce que c'est) n'est pas "mobile" parce que vous ne pouvez pas le mettre dans votre poche. C'est un portable mais ce n'est pas mobile.
1 votes
DavidGilbertson Je classerais un appareil mobile comme quelque chose qui n'est pas destiné à fonctionner comme un PC complet (c'est-à-dire Windows, OSX ou d'innombrables distributions Linux). Je sais que la frontière est assez floue avec Ubuntu Mobile et Linux en double amorçage sur les appareils Android, mais la distinction est généralement plus facile à faire par le système d'exploitation exécuté sur l'appareil (Android n'est pas un système d'exploitation de bureau complet, tandis que Windows 8 n'est généralement pas orienté vers le mobile).
0 votes
Je pense que Caractéristiques des médias d'interaction sont la solution ici. (Voir ma réponse à ce question similaire )
0 votes
En rapport : Quelle est la meilleure façon de détecter un dispositif à "écran tactile" en utilisant JavaScript ?
0 votes
Utiliser le cdn
https://cdnjs.cloudflare.com/ajax/libs/jquery-browser/0.1.0/jquery.browser.js
puis dans votre code où vous voulez vérifier le mobile, utilisez simplement$.browser.mobile
il retournera vrai si le dispositif actuel est un mobile. Pour vérifier s'il s'agit d'un ordinateur de bureau, utilisez$.browser.desktop
0 votes
Au lieu d'essayer de détecter un "appareil mobile", j'essaierais de détecter une petite taille d'écran. Après tout, vous voulez optimiser la taille de l'écran, n'est-ce pas ?
0 votes
Laissez-moi deviner, le problème n'est pas vraiment de détecter si l'utilisateur est sur mobile ou non, mais de disposer les éléments sur la page ? Je pense que width/height donneront les solutions les plus fiables.
1 votes
J'ai fait défiler toutes les réponses et aucune d'entre elles ne semble être bonne. Comment est-ce possible ? Toujours pas de solution ?
0 votes
@DimitriKopriwa TL;DR :
let isMobile = /mobi/i.test(navigator.userAgent);
1 votes
La réponse dépend beaucoup de ce que signifie "mobile" dans votre scénario. Un petit écran ? Dans ce cas, les tablettes (qui sont en fait des appareils mobiles) ne seront pas détectées. Exécuter un OS/navigateur mobile ? Dans ce cas, les Chromebooks et les ordinateurs de bureau fonctionnant sous Android sont mobiles, mais les appareils fonctionnant sous GNU/Linux ou similaire ne le seront pas. Vous avez un écran tactile ? Certains ordinateurs portables et de bureau l'ont aussi ! Tous les cas possibles ont des exceptions. Décidez de ce dont vous avez besoin et allez-y.