Sto lavorando su un sito WordPress in cui gli autori di solito incorporano Google Maps utilizzando iFrames nella maggior parte dei post.
Esiste un modo per disabilitare lo zoom tramite la rotellina del mouse su tutti usando Javascript?
Sto lavorando su un sito WordPress in cui gli autori di solito incorporano Google Maps utilizzando iFrames nella maggior parte dei post.
Esiste un modo per disabilitare lo zoom tramite la rotellina del mouse su tutti usando Javascript?
Risposte:
Stavo avendo lo stesso problema: quando si scorre la pagina, il puntatore si sposta sulla mappa, inizia a ingrandire / rimpicciolire la mappa invece di continuare a scorrere la pagina. :(
Quindi ho risolto questo mettendo un div
con un .overlay
esattamente prima di ogni iframe
inserimento gmap , vedi:
<html>
<div class="overlay" onClick="style.pointerEvents='none'"></div>
<iframe src="https://mapsengine.google.com/map/embed?mid=some_map_id" width="640" height="480"></iframe>
</html>
Nel mio CSS ho creato la classe:
.overlay {
background:transparent;
position:relative;
width:640px;
height:480px; /* your iframe height */
top:480px; /* your iframe height */
margin-top:-480px; /* your iframe height */
}
Il div coprirà la mappa, impedendo agli eventi puntatore di raggiungerla. Ma se fai clic sul div, diventa trasparente agli eventi puntatore, attivando di nuovo la mappa!
Spero di esserti stato di aiuto :)
z-index
per poter sovrapporre correttamente, però.
Ho provato la prima risposta in questa discussione e non ha funzionato per me, non importa quello che ho fatto, quindi ho trovato la mia soluzione:
Avvolgi l'iframe con una classe (.maps in questo esempio) e idealmente incorpora in modo rispondente il codice: http://embedresponsively.com/ - Cambia il CSS dell'iframe in pointer-events: none
e quindi usando la funzione click di jQuery sull'elemento genitore puoi cambiare l'iframe css perpointer-events:auto
HTML
<div class='embed-container maps'>
<iframe width='600' height='450' frameborder='0' src='http://foo.com'></iframe>
</div>
CSS
.maps iframe{
pointer-events: none;
}
jQuery
$('.maps').click(function () {
$('.maps iframe').css("pointer-events", "auto");
});
$( ".maps" ).mouseleave(function() {
$('.maps iframe').css("pointer-events", "none");
});
Sono sicuro che esiste un solo modo JavaScript per farlo, se qualcuno vuole aggiungere a questo sentiti libero.
Il modo JavaScript per riattivare gli eventi puntatore è piuttosto semplice. Basta dare un ID all'iFrame (cioè "iframe"), quindi applicare un evento onclick al div cointainer:
onclick="document.getElementById('iframe').style.pointerEvents= 'auto'"
<div class="maps" onclick="document.getElementById('iframe').style.pointerEvents= 'auto'">
<iframe id="iframe" src="" width="100%" height="450" frameborder="0" style="border:0" allowfullscreen></iframe>
</div>
pointer-events: none
impedirà qualsiasi interazione con la mappa (trascinamento, navigazione, clic, ecc.).
$(this).find('iframe').css("pointer-events", "auto");
Ho esteso la soluzione @nathanielperales.
Di seguito la descrizione del comportamento:
Sotto il codice javascript:
// Disable scroll zooming and bind back the click event
var onMapMouseleaveHandler = function (event) {
var that = $(this);
that.on('click', onMapClickHandler);
that.off('mouseleave', onMapMouseleaveHandler);
that.find('iframe').css("pointer-events", "none");
}
var onMapClickHandler = function (event) {
var that = $(this);
// Disable the click handler until the user leaves the map area
that.off('click', onMapClickHandler);
// Enable scrolling zoom
that.find('iframe').css("pointer-events", "auto");
// Handle the mouse leave event
that.on('mouseleave', onMapMouseleaveHandler);
}
// Enable map zooming with mouse scroll when the user clicks the map
$('.maps.embed-container').on('click', onMapClickHandler);
$('.maps.embed-container').find('iframe').css("pointer-events", "none");
Sto ri-modificando il codice scritto da #nathanielperales, ha funzionato davvero per me. Semplice e facile da catturare, ma funziona solo una volta. Quindi ho aggiunto mouseleave () su JavaScript. Idea adattata da #Bogdan E ora è perfetta. Prova questo. I crediti vanno a #nathanielperales e #Bogdan. Ho appena combinato entrambe le idee. Grazie ragazzi. Spero che questo possa aiutare anche gli altri ...
HTML
<div class='embed-container maps'>
<iframe width='600' height='450' frameborder='0' src='http://foo.com'> </iframe>
</div>
CSS
.maps iframe{
pointer-events: none;
}
jQuery
$('.maps').click(function () {
$('.maps iframe').css("pointer-events", "auto");
});
$( ".maps" ).mouseleave(function() {
$('.maps iframe').css("pointer-events", "none");
});
Improvvisa - Adatta - Supera
Ed ecco un esempio di jsFiddle.
pointer-events: auto
solo dopo che il mouse si è "spostato" sulla mappa per una certa durata? cioè avvia il timer quando il mouse entra in iframe e resettalo quando il mouse lascia. Se il timer arriva a X millisecondi, passa a pointer-events: auto
. E ogni volta che il mouse lascia l'iframe, ti basta tornare indietro pointer-events: none
.
Sì, è abbastanza facile. Ho affrontato un problema simile. Basta aggiungere la proprietà css "pointer-events" al div iframe e impostarlo su 'none' .
Esempio: <iframe style = "pointer-events: none" src = ........>
Nota a margine: questa correzione disabiliterebbe tutti gli altri eventi del mouse sulla mappa. Ha funzionato per me poiché non abbiamo richiesto alcuna interazione dell'utente sulla mappa.
Dopo aver fatto qualche ricerca hai 2 opzioni. Poiché le nuove mappe API con iframe embed non sembrano supportare la disabilitazione della rotellina del mouse.
In primo luogo sarebbe utilizzare google maps precedente ( https://support.google.com/maps/answer/3045828?hl=it ).
In secondo luogo sarebbe la creazione di una funzione JavaScript per semplificare l'incorporamento di una mappa per ciascun commento e l'utilizzo di parametri (è solo un codice di esempio per indicare che la posizione non mostra la soluzione esatta)
function createMap(containerid, parameters) {
var mymap = document.getElementById(containerid),
map_options = {
zoom: 13,
scrollwheel: false,
/* rest of options */
},
map = new google.maps.Map(mymap, map_options);
/* 'rest of code' to take parameters into account */
}
C'è una soluzione fantastica e semplice.
Devi aggiungere una classe personalizzata nel tuo CSS che imposta gli eventi del puntatore per mappare la tela su nessuna:
.scrolloff{
pointer-events: none;
}
Quindi, con jQuery, è possibile aggiungere e rimuovere quella classe in base a diversi eventi, ad esempio:
$( document ).ready(function() {
// you want to enable the pointer events only on click;
$('#map_canvas').addClass('scrolloff'); // set the pointer events to none on doc ready
$('#canvas').on('click', function() {
$('#map_canvas').removeClass('scrolloff'); // set the pointer events true on click
});
// you want to disable pointer events when the mouse leave the canvas area;
$( "#map_canvas" ).mouseleave(function() {
$('#map_canvas').addClass('scrolloff'); // set the pointer events to none when mouse leaves the map area
});
});
Ho creato un esempio in jsfiddle , spero che mi aiuti!
Mi basta registrare un account su developers.google.com e ottenere un token per chiamare un'API di Maps e disabilitarlo in questo modo (scrollwheel: false):
var map;
function initMap() {
map = new google.maps.Map(document.getElementById('container_google_maps'), {
center: {lat: -34.397, lng: 150.644},
zoom: 8,
scrollwheel: false
});
}
Questo è il mio approccio Trovo facile implementarlo su vari siti Web e utilizzarlo sempre
CSS e JavaScript:
<style type="text/css">
.scrolloff iframe {
pointer-events: none ;
}
</style>
<script type="text/javascript">
function scrollOn() {
$('#map').removeClass('scrolloff'); // set the pointer events true on click
}
function scrollOff() {
$('#map').addClass('scrolloff');
}
</script>
Nell'HTML, vorrai racchiudere l'iframe in un div.
<div id="map" class="scrolloff" onclick="scrollOn()" onmouseleave="scrollOff()" >
function scrollOn() {
$('#map').removeClass('scrolloff'); // set the pointer events true on click
}
function scrollOff() {
$('#map').addClass('scrolloff'); // set the pointer events true on click
}
.scrolloff iframe {
pointer-events: none ;
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<div id="map" class="scrolloff" onclick="scrollOn()" onmouseleave="scrollOff()" ><iframe src="https://www.google.com/maps/embed?pb=!1m18!1m12!1m3!1d23845.03946309692!2d-70.0451736316453!3d41.66373705082399!2m3!1f0!2f0!3f0!3m2!1i1024!2i768!4f13.1!3m3!1m2!1s0x89fb159980380d21%3A0x78c040f807017e30!2sChatham+Tides!5e0!3m2!1sen!2sus!4v1452964723177" width="100%" height="450" frameborder="0" style="border:0" allowfullscreen></iframe></div>
Spero che questo aiuti chiunque cerchi una soluzione semplice.
Ecco una soluzione semplice. Basta impostare il pointer-events: none
CSS su <iframe>
per disabilitare lo scorrimento del mouse.
<div id="gmap-holder">
<iframe width="100%" height="400" frameborder="0" style="border:0; pointer-events:none"
src="https://www.google.com/maps/embed/v1/place?q=XXX&key=YYY"></iframe>
</div>
Se si desidera che lo scorrimento del mouse venga attivato quando l'utente fa clic sulla mappa, utilizzare il seguente codice JS. Disabiliterà anche di nuovo lo scorrimento del mouse, quando il mouse si sposta dalla mappa.
$(function() {
$('#gmap-holder').click(function(e) {
$(this).find('iframe').css('pointer-events', 'all');
}).mouseleave(function(e) {
$(this).find('iframe').css('pointer-events', 'none');
});
})
Per disabilitare lo zoom della rotellina del mouse su Google Maps incorporato, devi solo impostare il puntatore-evento della proprietà CSS dell'iframe su nessuno:
<style>
#googlemap iframe {
pointer-events:none;
}
</style>
Tutto qui .. Abbastanza pulito eh?
<div id="googlemap">
<iframe src="https://www.google.com/maps/embed?pb=!1m18!1m12!1m3!1d3648.6714814904954!2d90.40069809681577!3d23.865796688563787!2m3!1f0!2f0!3f0!3m2!1i1024!2i768!4f13.1!3m3!1m2!1s0x3755c425897f1f09%3A0x2bdfa71343f07395!2sArcadia+Green+Point%2C+Rd+No.+16%2C+Dhaka+1230%2C+Bangladesh!5e0!3m2!1sen!2sin!4v1442184916780" width="400" height="300" frameborder="0" style="border:0" allowfullscreen></iframe>
</div>
Bene, per me la soluzione migliore era semplicemente usare così:
HTML:
<div id="google-maps">
<iframe frameborder="0" height="450" src="***embed-map***" width="100"</iframe>
</div>
CSS:
#google-maps iframe { pointer-events:none; }
JS:
<script>
$(function() {
$('#google-maps').click(function(e) {
$(this).find('iframe').css('pointer-events', 'auto');
}).mouseleave(function(e) {
$(this).find('iframe').css('pointer-events', 'none');
});
})
</script>
considerazioni:
La cosa migliore sarebbe aggiungere un overlay con una trasparenza più scura con un testo: " Fai clic per sfogliare " quando la rotellina del mouse è disattivata Ma quando viene attivato (dopo aver fatto clic su di esso), la trasparenza con il testo scompare e l'utente può navigare la mappa come previsto. Qualche indizio su come farlo?
Il modo più semplice per farlo è usare uno pseudo-elemento come :before
o :after
.
Questo metodo non richiede alcun elemento HTML aggiuntivo o jquery.
Se abbiamo ad esempio questa struttura html:
<div class="map_wraper">
<iframe src="https://www.google.com/maps/embed?pb=!1m18!1m12!1m3!1d405689.7826944034!2d-122.04109805!3d37.40280355!2m3!1f0!2f0!3f0!3m2!1i1024!2i768!4f13.1!3m3!1m2!1s0x808fb68ad0cfc739%3A0x7eb356b66bd4b50e!2sSilicon+Valley%2C+CA!5e0!3m2!1sen!2sro!4v1438864791455" width="600" height="450" frameborder="0" style="border:0" allowfullscreen></iframe>
</div>
Quindi tutto ciò che dobbiamo fare è rendere il wrapper relativo allo pseudo-elemento che creeremo per impedire lo scorrimento
.map_wraper{
position:relative;
}
Successivamente creeremo lo pseudo-elemento che verrà posizionato sulla mappa per impedire lo scorrimento:
.map_wraper:after{
background: none;
content: " ";
display: inline-block;
font-size: 0;
height: 100%;
left: 0;
opacity: 0;
position: absolute;
top: 0;
width: 100%;
z-index: 9;
}
E il gioco è fatto, niente jquery né elementi html extra! Ecco un esempio di jsfiddle funzionante: http://jsfiddle.net/e6j4Lbe1/
Ecco la mia soluzione semplice.
Metti il tuo iframe in un div con una classe chiamata "mappe" per esempio.
Questo sarà il CSS per il tuo iframe
.maps iframe { pointer-events: none }
Ed ecco un po 'di javascript che imposterà la proprietà pointer-events dell'iframe su "auto" quando passi l'elemento div per almeno 1 secondo (funziona meglio per me - impostalo su quello che ti piace) e cancella il timeout / impostalo di nuovo su "none" quando il mouse lascia l'elemento.
var maptimer;
$(".maps").hover(function(){
maptimer = setTimeout(function(){
$(".maps").find("iframe").css("pointer-events", "auto");
},1000);
},function(){
clearTimeout(maptimer);
$(".maps").find("iframe").css("pointer-events", "none");
});
Saluti.
Ho creato un plugin jQuery molto semplice per risolvere il problema. Controllalo su https://diazemiliano.github.io/googlemaps-scrollprevent
(function() {
$(function() {
$("#btn-start").click(function() {
$("iframe[src*='google.com/maps']").scrollprevent({
printLog: true
}).start();
return $("#btn-stop").click(function() {
return $("iframe[src*='google.com/maps']").scrollprevent().stop();
});
});
return $("#btn-start").trigger("click");
});
}).call(this);
Edit in JSFiddle Result JavaScript HTML CSS .embed-container {
position: relative !important;
padding-bottom: 56.25% !important;
height: 0 !important;
overflow: hidden !important;
max-width: 100% !important;
}
.embed-container iframe {
position: absolute !important;
top: 0 !important;
left: 0 !important;
width: 100% !important;
height: 100% !important;
}
.mapscroll-wrap {
position: static !important;
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.9.1/jquery.min.js"></script>
<script src="https://cdn.rawgit.com/diazemiliano/googlemaps-scrollprevent/v.0.6.5/dist/googlemaps-scrollprevent.min.js"></script>
<div class="embed-container">
<iframe src="https://www.google.com/maps/embed?pb=!1m18!1m12!1m3!1d12087.746318586604!2d-71.64614110000001!3d-40.76341959999999!2m3!1f0!2f0!3f0!3m2!1i1024!2i768!4f13.1!3m3!1m2!1s0x9610bf42e48faa93%3A0x205ebc786470b636!2sVilla+la+Angostura%2C+Neuqu%C3%A9n!5e0!3m2!1ses-419!2sar!4v1425058155802"
width="400" height="300" frameborder="0" style="border:0"></iframe>
</div>
<p><a id="btn-start" href="#">"Start Scroll Prevent"</a> <a id="btn-stop" href="#">"Stop Scroll Prevent"</a>
</p>
Utilizzando la risposta di @nathanielperales ho aggiunto la funzione hover perché per me funziona meglio quando l'utente perde la concentrazione sulla mappa per interrompere di nuovo lo scorrimento :)
$(function(){
$('.mapa').hover(function(){
stopScroll();},
function () {
$('.mapa iframe').css("pointer-events", "none");
});
});
function stopScroll(){
$('.mapa').click(function () {
$('.mapa iframe').css("pointer-events", "auto");
});
}
Variazioni su un tema: una soluzione semplice con jQuery, nessuna modifica CSS necessaria.
// make iframe active on click, disable on mouseleave
$('iframe.google_map').each( function(i, iframe) {
$(iframe).parent().hover( // make inactive on hover
function() { $(iframe).css('pointer-events', 'none');
}).click( // activate on click
function() { $(iframe).css('pointer-events', 'auto');
}).trigger('mouseover'); // make it inactive by default as well
});
Il listener al passaggio del mouse è collegato all'elemento genitore, quindi se l'attuale genitore è più grande, puoi semplicemente avvolgere l'iframe con un div prima della terza riga.
Spero che sia utile per qualcuno.
Mi sono imbattuto su questo problema da solo e ho usato alcune delle due risposte molto utili su questa domanda: la risposta di Czerasz e la risposta di Massa .
Entrambi hanno molta verità, ma da qualche parte nei miei test ho scoperto che uno non funzionava per i dispositivi mobili e aveva un supporto IE scarso (funziona solo su IE11). Questa è la soluzione di nathanielperales, quindi estesa da czerasz, che si basa su eventi-puntatore css e che non funziona su dispositivi mobili (non esiste alcun puntatore su dispositivi mobili) e non funziona su alcuna versione di IE che non sia v11 . Normalmente non mi importerebbe di meno, ma ci sono un sacco di utenti là fuori e vogliamo funzionalità coerenti, quindi sono andato con la soluzione overlay, usando un wrapper per rendere più facile la codifica.
Quindi, il mio markup è simile al seguente:
<div class="map embed-container">
<div id="map-notice" style="display: block;"> {Tell your users what to do!} </div>
<div class="map-overlay" style="display: block;"></div>
<iframe style="width:100%" src="https://www.google.com/maps/embed?pb=!1m14!1m8!1m3!1d3785.684302567802!2d-66.15578327375803!3d18.40721382009222!3m2!1i1024!2i768!4f13.1!3m3!1m2!1s0x8c036a35d02b013f%3A0x5962cad95b9ec7f8!2sPlaza+Del+Sol!5e0!3m2!1sen!2spr!4v1415284687548" width="633" height="461" frameborder="0"></iframe>
</div>
Quindi gli stili sono così:
.map.embed-container {
position:relative;
}
.map.embed-container #map-notice{
position:absolute;
right:0;
top:0;
background-color:rgb(100,100,100);/*for old IE browsers with no support for rgba()*/
background-color: rgba(0,0,0,.50);
color: #ccc;
padding: 8px;
}
.map.embed-container .map-overlay{
height:100%;
width:100%;
position:absolute;
z-index:9999;
background-color:rgba(0,0,0,0.10);/*should be transparent but this will help you see where the overlay is going in relation with the markup*/
}
Infine la sceneggiatura:
//using jquery...
var onMapMouseleaveHandler = function (event) {
$('#map-notice').fadeIn(500);
var elemento = $$(this);
elemento.on('click', onMapClickHandler);
elemento.off('mouseleave', onMapMouseleaveHandler);
$('.map-overlay').fadeIn(500);
}
var onMapClickHandler = function (event) {
$('#map-notice').fadeOut(500);
var elemento = $$(this);
elemento.off('click', onMapClickHandler);
$('.map-overlay').fadeOut(500);
elemento.on('mouseleave', onMapMouseleaveHandler);
}
$('.map.embed-container').on('click', onMapClickHandler);
Ho anche aggiunto la mia soluzione testata in una sintesi di GitHub , se ti piace ottenere cose da lì ...
Questa è una soluzione con CSS e Javascript (es. Jquery ma funziona anche con Javascript puro). Allo stesso tempo, la mappa è reattiva. Evita di ingrandire la mappa durante lo scorrimento, ma puoi attivarla facendo clic su di essa.
HTML / JQuery Javascript
<div id="map" onclick="$('#googlemap').css('pointerEvents','auto'); return true;">
<iframe id="googlemap" src="http://your-embed-url" height="350"></iframe>
</div>
CSS
#map {
position: relative;
padding-bottom: 36%; /* 16:9 ratio for responsive */
height: 0;
overflow: hidden;
background:transparent; /* does the trick */
z-index:98; /* does the trick */
}
#map iframe {
pointer-events:none; /* does the trick */
position: absolute;
top: 0;
left: 0;
width: 100% !important;
height: 100% !important;
z-index:97; /* does the trick */
}
Divertiti !
In Google Maps v3 ora puoi disabilitare lo scorrimento per ingrandire, il che porta a un'esperienza utente molto migliore. Le altre funzioni della mappa continueranno a funzionare e non avrai bisogno di ulteriori div. Ho anche pensato che ci dovrebbe essere un feedback per l'utente in modo che possano vedere quando lo scorrimento è abilitato, quindi ho aggiunto un bordo della mappa.
// map is the google maps object, '#map' is the jquery selector
preventAccidentalZoom(map, '#map');
// Disables and enables scroll to zoom as appropriate. Also
// gives the user a UI cue as to when scrolling is enabled.
function preventAccidentalZoom(map, mapSelector){
var mapElement = $(mapSelector);
// Disable the scroll wheel by default
map.setOptions({ scrollwheel: false })
// Enable scroll to zoom when there is a mouse down on the map.
// This allows for a click and drag to also enable the map
mapElement.on('mousedown', function () {
map.setOptions({ scrollwheel: true });
mapElement.css('border', '1px solid blue')
});
// Disable scroll to zoom when the mouse leaves the map.
mapElement.mouseleave(function () {
map.setOptions({ scrollwheel: false })
mapElement.css('border', 'none')
});
};
Questo ti darà una Google Map reattiva che interromperà lo scorrimento sull'iframe, ma una volta cliccato su ti permetterà di ingrandire.
Copia e incolla questo nel tuo html ma sostituisci il link iframe con il tuo. È un articolo su di esso con un esempio: disabilita lo zoom della rotellina del mouse sugli iframe di Google Map incorporati
<style>
.overlay {
background:transparent;
position:relative;
width:100%; /* your iframe width */
height:480px; /* your iframe height */
top:480px; /* your iframe height */
margin-top:-480px; /* your iframe height */
}
</style>
<div class="overlay" onClick="style.pointerEvents='none'"></div>
<iframe src="https://mapsengine.google.com/map/embed?mid=some_map_id" width="100%" height="480"></iframe>
Ecco il mio approccio a questo.
Inseriscilo nel mio file main.js o simile:
// Create an array of styles.
var styles = [
{
stylers: [
{ saturation: -300 }
]
},{
featureType: 'road',
elementType: 'geometry',
stylers: [
{ hue: "#16a085" },
{ visibility: 'simplified' }
]
},{
featureType: 'road',
elementType: 'labels',
stylers: [
{ visibility: 'off' }
]
}
],
// Lagitute and longitude for your location goes here
lat = -7.79722,
lng = 110.36880,
// Create a new StyledMapType object, passing it the array of styles,
// as well as the name to be displayed on the map type control.
customMap = new google.maps.StyledMapType(styles,
{name: 'Styled Map'}),
// Create a map object, and include the MapTypeId to add
// to the map type control.
mapOptions = {
zoom: 12,
scrollwheel: false,
center: new google.maps.LatLng( lat, lng ),
mapTypeControlOptions: {
mapTypeIds: [google.maps.MapTypeId.ROADMAP],
}
},
map = new google.maps.Map(document.getElementById('map'), mapOptions),
myLatlng = new google.maps.LatLng( lat, lng ),
marker = new google.maps.Marker({
position: myLatlng,
map: map,
icon: "images/marker.png"
});
//Associate the styled map with the MapTypeId and set it to display.
map.mapTypes.set('map_style', customMap);
map.setMapTypeId('map_style');
Quindi inserisci semplicemente un div vuoto nel punto in cui desideri che la mappa appaia sulla tua pagina.
<div id="map"></div>
Ovviamente dovrai chiamare anche l'API di Google Maps. Ho semplicemente creato un file chiamato mapi.js e l'ho lanciato nella mia cartella / js. Questo file deve essere chiamato prima del javascript sopra.
`window.google = window.google || {};
google.maps = google.maps || {};
(function() {
function getScript(src) {
document.write('<' + 'script src="' + src + '"' +
' type="text/javascript"><' + '/script>');
}
var modules = google.maps.modules = {};
google.maps.__gjsload__ = function(name, text) {
modules[name] = text;
};
google.maps.Load = function(apiLoad) {
delete google.maps.Load;
apiLoad([0.009999999776482582,[[["http://mt0.googleapis.com/vt?lyrs=m@228000000\u0026src=api\u0026hl=en-US\u0026","http://mt1.googleapis.com/vt?lyrs=m@228000000\u0026src=api\u0026hl=en-US\u0026"],null,null,null,null,"m@228000000"],[["http://khm0.googleapis.com/kh?v=135\u0026hl=en-US\u0026","http://khm1.googleapis.com/kh?v=135\u0026hl=en-US\u0026"],null,null,null,1,"135"],[["http://mt0.googleapis.com/vt?lyrs=h@228000000\u0026src=api\u0026hl=en-US\u0026","http://mt1.googleapis.com/vt?lyrs=h@228000000\u0026src=api\u0026hl=en-US\u0026"],null,null,null,null,"h@228000000"],[["http://mt0.googleapis.com/vt?lyrs=t@131,r@228000000\u0026src=api\u0026hl=en-US\u0026","http://mt1.googleapis.com/vt?lyrs=t@131,r@228000000\u0026src=api\u0026hl=en-US\u0026"],null,null,null,null,"t@131,r@228000000"],null,null,[["http://cbk0.googleapis.com/cbk?","http://cbk1.googleapis.com/cbk?"]],[["http://khm0.googleapis.com/kh?v=80\u0026hl=en-US\u0026","http://khm1.googleapis.com/kh?v=80\u0026hl=en-US\u0026"],null,null,null,null,"80"],[["http://mt0.googleapis.com/mapslt?hl=en-US\u0026","http://mt1.googleapis.com/mapslt?hl=en-US\u0026"]],[["http://mt0.googleapis.com/mapslt/ft?hl=en-US\u0026","http://mt1.googleapis.com/mapslt/ft?hl=en-US\u0026"]],[["http://mt0.googleapis.com/vt?hl=en-US\u0026","http://mt1.googleapis.com/vt?hl=en-US\u0026"]],[["http://mt0.googleapis.com/mapslt/loom?hl=en-US\u0026","http://mt1.googleapis.com/mapslt/loom?hl=en-US\u0026"]],[["https://mts0.googleapis.com/mapslt?hl=en-US\u0026","https://mts1.googleapis.com/mapslt?hl=en-US\u0026"]],[["https://mts0.googleapis.com/mapslt/ft?hl=en-US\u0026","https://mts1.googleapis.com/mapslt/ft?hl=en-US\u0026"]]],["en-US","US",null,0,null,null,"http://maps.gstatic.com/mapfiles/","http://csi.gstatic.com","https://maps.googleapis.com","http://maps.googleapis.com"],["http://maps.gstatic.com/intl/en_us/mapfiles/api-3/14/0","3.14.0"],[2635921922],1,null,null,null,null,0,"",null,null,0,"http://khm.googleapis.com/mz?v=135\u0026",null,"https://earthbuilder.googleapis.com","https://earthbuilder.googleapis.com",null,"http://mt.googleapis.com/vt/icon",[["http://mt0.googleapis.com/vt","http://mt1.googleapis.com/vt"],["https://mts0.googleapis.com/vt","https://mts1.googleapis.com/vt"],[null,[[0,"m",228000000]],[null,"en-US","US",null,18,null,null,null,null,null,null,[[47],[37,[["smartmaps"]]]]],0],[null,[[0,"m",228000000]],[null,"en-US","US",null,18,null,null,null,null,null,null,[[47],[37,[["smartmaps"]]]]],3],[null,[[0,"h",228000000]],[null,"en-US","US",null,18,null,null,null,null,null,null,[[50],[37,[["smartmaps"]]]]],0],[null,[[0,"h",228000000]],[null,"en-US","US",null,18,null,null,null,null,null,null,[[50],[37,[["smartmaps"]]]]],3],[null,[[4,"t",131],[0,"r",131000000]],[null,"en-US","US",null,18,null,null,null,null,null,null,[[5],[37,[["smartmaps"]]]]],0],[null,[[4,"t",131],[0,"r",131000000]],[null,"en-US","US",null,18,null,null,null,null,null,null,[[5],[37,[["smartmaps"]]]]],3],[null,null,[null,"en-US","US",null,18],0],[null,null,[null,"en-US","US",null,18],3],[null,null,[null,"en-US","US",null,18],6],[null,null,[null,"en-US","US",null,18],0]]], loadScriptTime);
};
var loadScriptTime = (new Date).getTime();
getScript("http://maps.gstatic.com/intl/en_us/mapfiles/api-3/14/0/main.js");
})();`
Quando chiami il file mapi.js, assicurati di passarlo all'attributo false del sensore.
vale a dire: <script type="text/javascript" src="js/mapi.js?sensor=false"></script>
La nuova versione 3 dell'API richiede l'inclusione del sensore per qualche motivo. Assicurati di includere il file mapi.js prima del tuo file main.js.
Per google maps v2 - GMap2:
ar map = new GMap2(document.getElementById("google_map"));
map.disableScrollWheelZoom();
se hai un iframe che utilizza l'API integrata di Google map in questo modo:
<iframe width="320" height="400" frameborder="0" src="https://www.google.com/maps/embed/v1/place?q=Cagli ... "></iframe>
puoi aggiungere questo stile css: pointer-event: none; ES.
<iframe width="320" height="400" frameborder="0" style="pointer-event:none;" src="https://www.google.com/maps/embed/v1/place?q=Cagli ... "></iframe>
Ecco la mia opinione sulla risposta @nathanielperales estesa da @chams, ora estesa di nuovo da me.
HTML
<div class='embed-container maps'>
<iframe width='600' height='450' frameborder='0' src='http://foo.com'></iframe>
</div>
jQuery
// we're doing so much with jQuery already, might as well set the initial state
$('.maps iframe').css("pointer-events", "none");
// as a safety, allow pointer events on click
$('.maps').click(function() {
$(this).find('iframe').css("pointer-events", "auto");
});
$('.maps').mouseleave(function() {
// set the default again on mouse out - disallow pointer events
$(this).find('iframe').css("pointer-events", "none");
// unset the comparison data so it doesn't effect things when you enter again
$(this).removeData('oldmousepos');
});
$('.maps').bind('mousemove', function(e){
$this = $(this);
// check the current mouse X position
$this.data('mousepos', e.pageX);
// set the comparison data if it's null or undefined
if ($this.data('oldmousepos') == null) {
$this.data('oldmousepos', $this.data('mousepos'));
}
setTimeout(function(){
// some left/right movement - allow pointer events
if ($this.data('oldmousepos') != $this.data('mousepos')) {
$this.find('iframe').css("pointer-events", "auto");
}
// set the compairison variable
$this.data('oldmousepos', $this.data('mousepos'));
}, 300);
console.log($this.data('oldmousepos')+ ' ' + $this.data('mousepos'));
});
Il più semplice :
<div id="myIframe" style="width:640px; height:480px;">
<div style="background:transparent; position:absolute; z-index:1; width:100%; height:100%; cursor:pointer;" onClick="style.pointerEvents='none'"></div>
<iframe src="https://www.google.com/maps/d/embed?mid=XXXXXXXXXXXXXX" style="width:640px; height:480px;"></iframe>
</div>
Aggiungi questo al tuo script:
function initMap() {
var uluru = {lat: -25.363, lng: 131.044};
var map = new google.maps.Map(document.getElementById('map'), {
zoom: 12,
center: uluru,
scrollwheel: false,
disableDefaultUI: true,
disableDoubleClickZoom: true
});
var marker = new google.maps.Marker({
position: uluru,
map: map
});
}
Ecco la mia soluzione al problema, stavo costruendo un sito WP, quindi qui c'è un piccolo codice php. Ma la chiave è scrollwheel: false,
nell'oggetto mappa.
function initMap() {
var uluru = {lat: <?php echo $latitude; ?>, lng: <?php echo $Longitude; ?>};
var map = new google.maps.Map(document.getElementById('map'), {
zoom: 18,
scrollwheel: false,
center: uluru
});
var marker = new google.maps.Marker({
position: uluru,
map: map
});
}
Spero che questo possa aiutare. Saluti
scrollwheel
sufalse
.