Je travaille sur un site WordPress où les auteurs intègrent généralement Google Maps à l'aide d'iFrames dans la plupart des articles.
Existe-t-il un moyen de désactiver le zoom via la molette de la souris sur tous en utilisant Javascript?
google-maps
scrollwheel
holiveira
la source
la source
scrollwheel
surfalse
.Réponses:
J'avais le même problème: lorsque vous faites défiler la page, le pointeur passe sur la carte, il commence à zoomer / dézoomer sur la carte au lieu de continuer à faire défiler la page. :(
J'ai donc résolu cela en mettant un
div
avec un.overlay
exactement avant chaqueiframe
insertion de gmap , voir:Dans mon CSS, j'ai créé la classe:
Le div couvrira la carte, empêchant les événements de pointeur d'y accéder. Mais si vous cliquez sur le div, il devient transparent pour pointer les événements, réactivant la carte!
J'espère vous avoir aidé :)
la source
z-index
pour qu'il se superpose correctement, cependant.J'ai essayé la première réponse dans cette discussion et cela ne fonctionnait pas pour moi, peu importe ce que je faisais, j'ai donc trouvé ma propre solution:
Enveloppez l'iframe avec une classe (.maps dans cet exemple) et le code idéalement intégré: http://embedresponsively.com/ - Modifiez le CSS de l'iframe en
pointer-events: none
puis en utilisant la fonction de clic de jQuery à l'élément parent, vous pouvez modifier les iframes css àpointer-events:auto
HTML
CSS
jQuery
Je suis sûr qu'il y a une seule façon de faire JavaScript, si quelqu'un veut ajouter à cela, n'hésitez pas.
La façon JavaScript de réactiver les événements de pointeur est assez simple. Donnez simplement un Id à l'iFrame (ie "iframe"), puis appliquez un événement onclick à la div du cointainer:
la source
pointer-events: none
empêchera toute interaction avec la carte (glissement, navigation, clics, etc.).$(this).find('iframe').css("pointer-events", "auto");
J'ai étendu la solution @nathanielperales.
Sous la description du comportement:
Sous le code javascript:
Et voici un exemple jsFiddle .
la source
$('.maps.embed-container').find('iframe').css("pointer-events", "none");
Je suis en train de rééditer le code écrit par #nathanielperales, cela a vraiment fonctionné pour moi. Simple et facile à attraper mais son travail une seule fois. J'ai donc ajouté mouseleave () sur JavaScript. Idée adaptée de #Bogdan Et maintenant c'est parfait. Essaye ça. Les crédits vont à #nathanielperales et #Bogdan. Je viens de combiner les deux idées. Merci les gars. J'espère que cela aidera les autres aussi ...
HTML
CSS
jQuery
Improviser - Adapter - Surmonter
Et voici un exemple jsFiddle.
la source
pointer-events: auto
uniquement après que la souris a "survolé" la carte pendant une certaine durée? c'est-à-dire démarrer le chronomètre lorsque la souris entre dans iframe et le réinitialiser lorsque la souris quitte. Si la minuterie atteint X millisecondes, passez àpointer-events: auto
. Et chaque fois que la souris quitte l'iframe, vous revenez simplement àpointer-events: none
.Oui, c'est assez facile. J'ai fait face à un problème similaire. Ajoutez simplement la propriété css «pointer-events» à la division iframe et définissez-la sur «none» .
Exemple: <iframe style = "pointer-events: none" src = ........>
SideNote: Cette correction désactiverait tous les autres événements de souris sur la carte. Cela a fonctionné pour moi car nous n'avons pas eu besoin d'interaction de l'utilisateur sur la carte.
la source
la source
Après avoir fait quelques recherches, vous avez 2 options. Étant donné que les nouvelles API de cartes avec iframe intégrées ne semblent pas prendre en charge la désactivation de la molette de la souris.
La première serait d'utiliser d'anciennes cartes Google ( https://support.google.com/maps/answer/3045828?hl=en ).
La seconde consisterait à créer une fonction javascript pour simplifier l'incorporation d'une carte pour chaque commentaire et à utiliser des paramètres (c'est un exemple de code uniquement pour pointer l'emplacement et ne pas montrer la solution exacte)
la source
Il existe une solution impressionnante et facile.
Vous devez ajouter une classe personnalisée dans votre CSS qui définit les événements de pointeur pour mapper le canevas sur aucun:
Ensuite, avec jQuery, vous pouvez ajouter et supprimer cette classe en fonction de différents événements, par exemple:
J'ai créé un exemple dans jsfiddle , j'espère que ça aide!
la source
Je viens d'enregistrer un compte sur developers.google.com et d'obtenir un jeton pour appeler une API Maps, et je désactive simplement cela comme ceci (molette de défilement: false):
la source
Telle est mon approche. Je trouve qu'il est facile à mettre en œuvre sur divers sites Web et à l'utiliser tout le temps
CSS et JavaScript:
Dans le HTML, vous voudrez encapsuler l'iframe dans une div.
<div id="map" class="scrolloff" onclick="scrollOn()" onmouseleave="scrollOff()" >
J'espère que cela aidera toute personne à la recherche d'une solution simple.
la source
Voici une solution simple. Réglez simplement le
pointer-events: none
CSS sur<iframe>
pour désactiver le défilement de la souris.Si vous souhaitez que le défilement de la souris soit activé lorsque l'utilisateur clique sur la carte, utilisez le code JS suivant. Cela désactivera également le défilement de la souris lorsque la souris sort de la carte.
la source
Pour désactiver le zoom de la molette de la souris sur Google Maps intégré, il vous suffit de définir les événements de pointeur de propriété css de l'iframe sur aucun:
C'est tout .. Assez bien hein?
la source
Eh bien, pour moi, la meilleure solution était d'utiliser simplement comme ceci:
HTML:
CSS:
JS:
RÉSULTAT
Considérations:
Le mieux serait d'ajouter une superposition avec une transparence plus sombre avec un texte: " Cliquer pour parcourir " lorsque la molette de la souris est désactivée Mais quand il est activé (après avoir cliqué dessus) alors la transparence avec du texte disparaîtrait et l'utilisateur pourrait parcourir la carte comme prévu. Des indices sur la façon de faire ça?
la source
Ajoutez du style à
pointer-events:none;
ce travailla source
La façon la plus simple de le faire est d'utiliser un pseudo-élément comme
:before
ou:after
.Cette méthode ne nécessitera aucun élément HTML supplémentaire ou jquery.
Si nous avons par exemple cette structure html:
Ensuite, tout ce que nous devons faire est de faire le wrapper par rapport au pseudo-élément que nous allons créer pour empêcher le défilement
Après cela, nous allons créer le pseudo-élément qui sera positionné sur la carte pour empêcher le défilement:
Et vous avez terminé, pas de jquery pas d'éléments HTML supplémentaires! Voici un exemple fonctionnel de jsfiddle: http://jsfiddle.net/e6j4Lbe1/
la source
Voici ma solution simple.
Mettez votre iframe dans un div avec une classe appelée "maps" par exemple.
Ce sera le CSS de votre iframe
Et voici un petit javascript qui définira la propriété pointer-events de l'iframe sur "auto" lorsque vous survolez l'élément div pendant au moins 1 seconde (fonctionne mieux pour moi - définissez-le sur ce que vous voulez) et efface le délai d'attente / définissez-le à nouveau sur "none" lorsque la souris quitte l'élément.
À votre santé.
la source
J'ai créé un plugin jQuery très simple pour résoudre le problème. Vérifiez-le sur https://diazemiliano.github.io/googlemaps-scrollprevent
la source
En utilisant la réponse de @nathanielperales, j'ai ajouté la fonction de survol, car cela fonctionne mieux lorsque l'utilisateur perd le focus sur la carte pour arrêter de faire défiler à nouveau :)
la source
Variations sur un thème: une solution simple avec jQuery, aucune modification CSS nécessaire.
L'écouteur de survol est attaché à l'élément parent, donc si le parent actuel est plus grand, vous pouvez simplement envelopper l'iframe avec un div avant la 3ème ligne.
J'espère que ce sera utile pour quelqu'un.
la source
Je suis tombé sur ce problème moi-même et j'ai utilisé une combinaison de deux réponses très utiles sur cette question: la réponse de czerasz et massa .
Ils ont tous deux beaucoup de vérité, mais quelque part dans mes tests, j'ai découvert que l'un ne fonctionnait pas pour les mobiles et avait un mauvais support IE (ne fonctionne que sur IE11). Ceci est la solution de nathanielperales, puis étendue par czerasz, qui s'appuie sur les événements de pointeur css et qui ne fonctionne pas sur mobile (il n'y a pas de pointeur sur mobile) et cela ne fonctionne pas sur aucune version d'IE qui n'est pas v11 . Normalement, je m'en fous, mais il y a une tonne d'utilisateurs et nous voulons des fonctionnalités cohérentes.J'ai donc opté pour la solution de superposition, en utilisant un wrapper pour faciliter le codage.
Donc, mon balisage ressemble à ceci:
Ensuite, les styles sont comme ceci:
Enfin le script:
J'ai également ajouté ma solution testée dans un gist GitHub , si vous aimez obtenir des trucs à partir de là ...
la source
C'est une solution avec CSS et Javascript (ie. Jquery mais fonctionne aussi avec Javascript pur). En même temps, la carte est réactive. Évitez la carte pour zoomer lors du défilement, mais la carte peut être activée en cliquant dessus.
HTML / JQuery Javascript
CSS
S'amuser !
la source
Dans Google Maps v3, vous pouvez désormais désactiver le défilement pour zoomer, ce qui améliore considérablement l'expérience utilisateur. D'autres fonctions de carte fonctionneront toujours et vous n'avez pas besoin de divs supplémentaires. J'ai également pensé qu'il devrait y avoir des commentaires pour l'utilisateur afin qu'il puisse voir lorsque le défilement est activé, j'ai donc ajouté une bordure de carte.
la source
Cela vous donnera une carte Google Maps réactive qui arrêtera le défilement sur l'iframe, mais une fois cliqué sur, vous permettra de zoomer.
Copiez et collez ceci dans votre html mais remplacez le lien iframe par le vôtre. Il est un article à ce sujet avec un exemple: Désactiver le zoom de la molette de la souris sur les iframes Google Map intégrés
la source
Voici mon approche à ce sujet.
Insérez ceci dans mon fichier main.js ou similaire:
Ensuite, insérez simplement un div vide où vous voulez que la carte apparaisse sur votre page.
<div id="map"></div>
Vous devrez évidemment également appeler l'API Google Maps. J'ai simplement créé un fichier appelé mapi.js et l'ai jeté dans mon dossier / js. Ce fichier doit être appelé avant le javascript ci-dessus.
Lorsque vous appelez le fichier mapi.js, assurez-vous de lui transmettre l'attribut false du capteur.
c'est à dire:
<script type="text/javascript" src="js/mapi.js?sensor=false"></script>
La nouvelle version 3 de l'API nécessite l'inclusion de capteur pour une raison quelconque. Assurez-vous d'inclure le fichier mapi.js avant votre fichier main.js.
la source
Pour google maps v2 - GMap2:
la source
si vous avez un iframe utilisant l'API intégrée de Google map comme ceci:
vous pouvez ajouter ce style css: pointer-event: none; ES.
la source
Voici mon point de vue sur la réponse @nathanielperales étendue par @chams, maintenant étendue à nouveau par moi.
HTML
jQuery
la source
Le plus simple :
la source
Ajoutez ceci à votre script:
la source
Voici ma solution au problème, je construisais un site WP, donc il y a un petit code php ici. Mais la clé se trouve
scrollwheel: false,
dans l'objet carte.J'espère que cela vous aidera. À votre santé
la source