Yazarların çoğu yazıda iFrames kullanarak Google Haritalar'ı gömdükleri bir WordPress sitesinde çalışıyorum.
Javascript kullanarak hepsinde fareyi kaydırma tekerleği ile yakınlaştırmayı devre dışı bırakmanın bir yolu var mı?
Yazarların çoğu yazıda iFrames kullanarak Google Haritalar'ı gömdükleri bir WordPress sitesinde çalışıyorum.
Javascript kullanarak hepsinde fareyi kaydırma tekerleği ile yakınlaştırmayı devre dışı bırakmanın bir yolu var mı?
Yanıtlar:
Aynı sorunu yaşıyordum: sayfayı kaydırdığınızda imleç haritanın üzerine gelir, sayfayı kaydırmaya devam etmek yerine haritayı yakınlaştırır / uzaklaştırır. :(
Bu yüzden her gmap yerleştirmeden önce bir div
ile koyarak bu çözüldü , bkz:.overlay
iframe
<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>
Benim CSS sınıf oluşturdu:
.overlay {
background:transparent;
position:relative;
width:640px;
height:480px; /* your iframe height */
top:480px; /* your iframe height */
margin-top:-480px; /* your iframe height */
}
Div, haritayı kapsayacak ve işaretçinin olayların ona ulaşmasını önleyecektir. Ancak div'ı tıklatırsanız, haritayı tekrar etkinleştirerek işaretçi olaylarına şeffaf olur!
Umarım size yardımcı olur :)
z-index
doğru şekilde bindirmek için bir belirtmek zorunda kaldım .
Bu tartışmadaki ilk cevabı denedim ve ne yaptığımdan bağımsız olarak benim için çalışmadı, bu yüzden kendi çözümümü buldum:
İframe'i bir sınıfla sarın (bu örnekte .maps) ve ideal olarak kapsamlı bir şekilde kodlayın: http://embedresponsively.com/ - iframe'in CSS'sini değiştirin pointer-events: none
ve sonra jQuery'nin click işlevini kullanarak üst öğeye iframes css içinpointer-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");
});
Eminim bunu yapmanın tek yolu JavaScript'tir, eğer birisi buna eklemek istiyorsa çekinmeyin.
İşaretçi olaylarını yeniden etkinleştirmenin JavaScript yolu oldukça basittir. Sadece iFrame'e bir id (yani "iframe") verin, ardından cointainer div öğesine bir onclick olayı uygulayın:
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
harita ile etkileşimi önleyecektir (sürükleme, gezinme, tıklamalar, vb.).
$(this).find('iframe').css("pointer-events", "auto");
@Nathanielperales çözümünü genişlettim.
Davranış açıklamasının altında:
Javascript kodunun altında:
// 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");
#Nathanielperales tarafından yazılan kodu gerçekten benim için çalıştı yeniden düzenleme. Basit ve yakalamak kolay ama sadece bir kez çalışır. Bu yüzden JavaScript'e mouseleave () ekledim. Fikir #Bogdan uyarlanmış Ve şimdi mükemmel. Bunu dene. Kredi #nathanielperales ve #Bogdan'a gidiyor. Her iki fikri de birleştirdim. Sağolun beyler. Umarım bu başkalarına da yardımcı olur ...
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");
});
Doğaçlama - Uyum - Üstesinden Gelme
Ve işte bir jsFiddle örneği.
pointer-events: auto
sadece fareyi belirli bir süre için haritanın üzerine "getirdikten sonra" tıklamayı engelleyebilirsiniz. örn. fare iframe'e girdiğinde zamanlayıcıyı başlat ve fare kalktığında sıfırla. Zamanlayıcı X milisaniyeye ulaşırsa, seçeneğine geçin pointer-events: auto
. Ve fare iframe'i terk ettiğinde sadece geri dönersiniz pointer-events: none
.
Evet, oldukça kolay. Benzer bir sorunla karşılaştım. Sadece iframe div'e css özelliğini "pointer-events" ekleyin ve 'none' olarak ayarlayın .
Örnek: <iframe style = "pointer-events: none" src = ........>
SideNote: Bu düzeltme, haritadaki diğer tüm fare olaylarını devre dışı bırakır. Harita üzerinde herhangi bir kullanıcı etkileşimi gerektirmediği için benim için çalıştı.
Biraz araştırma yaptıktan sonra 2 seçeneğiniz var. İframe gömülü yeni haritalar, fare tekerleğinin devre dışı bırakılmasını desteklemiyor gibi görünüyor.
İlk olarak eski google haritaları kullanmak ( https://support.google.com/maps/answer/3045828?hl=tr ).
İkincisi , her yorum için bir haritanın yerleştirilmesini basitleştirmek ve parametreleri kullanmak için bir javascript işlevi oluşturmak olacaktır (sadece konumu tam çözümü göstermeyecek şekilde noktaya örnek kod)
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 */
}
Müthiş ve kolay bir çözüm var.
Css'nize tuvali hiçbiri ile eşlemek için işaretçi olaylarını ayarlayan özel bir sınıf eklemeniz gerekir:
.scrolloff{
pointer-events: none;
}
Ardından, jQuery ile bu sınıfı farklı etkinliklere dayalı olarak ekleyebilir ve kaldırabilirsiniz, örneğin:
$( 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
});
});
Sadece bir hesabı developers.google.com'a kaydettiriyorum ve bir Google Haritalar API'sını aramak için bir jeton alıyorum ve bunu şu şekilde devre dışı bırakıyorum (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
});
}
Bu benim yaklaşımım. Çeşitli web sitelerinde uygulamayı ve her zaman kullanmayı kolay buluyorum
CSS ve 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>
HTML'de iframe'i bir div içine sarmak isteyeceksiniz.
<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>
Umarım bu basit bir çözüm arayan herkese yardımcı olur.
İşte basit bir çözüm. Fare kaydırmayı devre dışı bırakmak için pointer-events: none
CSS <iframe>
ayarını yapmanız yeterlidir.
<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>
Kullanıcı haritayı tıklattığında fare kaydırmasının etkinleştirilmesini istiyorsanız, aşağıdaki JS kodunu kullanın. Fare haritadan çıktığında da fare kaydırmasını devre dışı bırakır.
$(function() {
$('#gmap-holder').click(function(e) {
$(this).find('iframe').css('pointer-events', 'all');
}).mouseleave(function(e) {
$(this).find('iframe').css('pointer-events', 'none');
});
})
Katıştırılmış Google Haritalar'da fare kaydırma tekerleği yakınlaştırmasını devre dışı bırakmak için, iframe'in css özelliği işaretçi etkinliklerini yok olarak ayarlamanız yeterlidir:
<style>
#googlemap iframe {
pointer-events:none;
}
</style>
Hepsi bu .. Oldukça temiz ha?
<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>
Benim için en iyi çözüm bu şekilde kullanmaktı:
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>
hususlar:
En iyisi, bir metinle daha koyu şeffaflık içeren bir kaplama eklemek olacaktır: Fare tekerleği devre dışı bırakıldığında " Göz atmak için tıklayın " Ancak etkinleştirildiğinde (üzerine tıkladıktan sonra), metin ile şeffaflık kaybolacak ve kullanıcı göz atabilecektir harita beklendiği gibi. Bunun nasıl yapılacağına dair ipucu var mı?
Bunu yapmanın en basit yolu, :before
veya gibi bir sözde eleman kullanmaktır :after
.
Bu yöntem herhangi bir ek html öğesi veya jquery gerektirmez.
Örneğin bu html yapımız varsa:
<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>
Sonra tek yapmamız gereken, kaydırmayı önlemek için oluşturacağımız sözde öğeye göre sargıyı yapmaktır
.map_wraper{
position:relative;
}
Bundan sonra, kaydırmayı önlemek için haritanın üzerine yerleştirilecek sözde elemanı oluşturacağız:
.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;
}
Ve işiniz bitti, jquery yok ekstra html öğesi yok! İşte çalışan bir jsfiddle örneği: http://jsfiddle.net/e6j4Lbe1/
İşte benim basit çözümüm.
İframe'inizi, örneğin "haritalar" adlı bir sınıfa yerleştirin.
Bu, iframe'iniz için CSS olacaktır
.maps iframe { pointer-events: none }
Ve div öğesini en az 1 saniye boyunca tuttuğunuzda iframe'in pointer-events özelliğini "auto" olarak ayarlayan küçük bir javascript (benim için en iyisi - istediğiniz gibi ayarlayın) ve zaman aşımı / fare öğeden ayrıldığında tekrar "none" olarak ayarlayın.
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");
});
Şerefe.
Sorunu çözmek için çok basit bir jQuery eklentisi oluşturdum. Https://diazemiliano.github.io/googlemaps-scrollprevent adresinden kontrol edin
(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>
@Nathanielperales'ın yanıtını kullanarak fareyle üzerine gelindiğim fonksiyonu ekledim, çünkü kullanıcı tekrar kaydırmayı durdurmak için haritaya odaklanmayı kaybettiğinde daha iyi çalışıyor :)
$(function(){
$('.mapa').hover(function(){
stopScroll();},
function () {
$('.mapa iframe').css("pointer-events", "none");
});
});
function stopScroll(){
$('.mapa').click(function () {
$('.mapa iframe').css("pointer-events", "auto");
});
}
Bir temadaki varyasyonlar: jQuery ile basit bir çözüm, CSS düzenlemesine gerek yok.
// 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
});
Fareyle üzerine gelme dinleyicisi üst öğeye eklenir, bu nedenle geçerli üst öğe daha büyükse, iframe'i 3. satırdan önce bir div ile sarabilirsiniz.
Umarım birisi için faydalı olur.
Bu konuyu kendim tökezledim ve bu soruya çok faydalı iki cevabın bir karışımını kullandım : czerasz cevabı ve massa cevabı.
Her ikisinin de bir sürü gerçeği var, ancak testlerimde bir yerlerde, mobil cihazlar için işe yaramadığını ve zayıf IE desteğine sahip olduğunu öğrendim (sadece IE11'de çalışıyor). Bu nathanielperales tarafından çözümdür, daha sonra czerasz tarafından genişletilir, bu da işaretçi olayları css'e dayanır ve mobilde çalışmaz (mobilde işaretçi yoktur) ve IE'nin v11 olmayan herhangi bir sürümünde çalışmaz . Normalde daha az umursamam, ama orada bir ton kullanıcı var ve tutarlı işlevsellik istiyoruz, bu yüzden kodlamayı kolaylaştırmak için bir sargı kullanarak bindirme çözümü ile gittim.
Yani, işaretlemem şöyle görünüyor:
<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>
Sonra stiller şöyle:
.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*/
}
Son olarak senaryo:
//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);
Test edilmiş çözümümü bir GitHub özetine ekledim , eğer oradan bir şeyler almak isterseniz ...
Bu CSS ve Javascript ile bir çözümdür (yani. Jquery ama aynı zamanda saf Javascript ile de çalışır). Aynı zamanda harita duyarlı. Kaydırma sırasında haritayı yakınlaştırmaktan kaçının, ancak haritayı tıklayarak etkinleştirebilirsiniz.
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 */
}
İyi eğlenceler !
Google Maps v3'te artık yakınlaştırmak için kaydırmayı devre dışı bırakabilirsiniz, bu da çok daha iyi bir kullanıcı deneyimi sağlar. Diğer harita işlevleri çalışmaya devam eder ve fazladan bölmeye ihtiyacınız yoktur. Ayrıca, kaydırma etkinleştirildiğinde görebilmeleri için kullanıcı için bazı geri bildirimler olması gerektiğini düşündüm, bu yüzden bir harita kenarlığı ekledim.
// 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')
});
};
Bu, iframe'deki kaydırmayı durduracak duyarlı bir Google Haritası verecektir, ancak bir kez tıklandığında yakınlaştırma yapmanıza izin verecektir.
Bunu kopyalayıp html'nize yapıştırın, ancak iframe bağlantısını kendinizle değiştirin. Üzerinde bir örnek olan bir makale var: Katıştırılmış Google Harita iframe'lerinde fare kaydırma tekerleğini yakınlaştırmayı devre dışı bırak
<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>
İşte benim buna yaklaşımım.
Bunu main.js veya benzeri bir dosyaya yerleştir:
// 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');
Ardından haritanın sayfanızda görünmesini istediğiniz yere boş bir div ekleyin.
<div id="map"></div>
Açıkça Google Haritalar API'sını da aramanız gerekir. Basitçe mapi.js adlı bir dosya oluşturdum ve / js klasörüme attım. Bu dosyanın yukarıdaki javascript'ten önce çağrılması gerekir.
`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");
})();`
Mapi.js dosyasını çağırdığınızda, dosyaya yanlış özniteliğini ilettiğinizden emin olun.
yani: <script type="text/javascript" src="js/mapi.js?sensor=false"></script>
API'nın yeni sürümü 3, bir nedenden dolayı sensörün dahil edilmesini gerektirir. Main.js dosyanızdan önce mapi.js dosyasını eklediğinizden emin olun.
Google Maps v2 - GMap2 için:
ar map = new GMap2(document.getElementById("google_map"));
map.disableScrollWheelZoom();
Google haritasına yerleştirilmiş API'yı aşağıdaki gibi kullanan bir iframe'iniz varsa:
<iframe width="320" height="400" frameborder="0" src="https://www.google.com/maps/embed/v1/place?q=Cagli ... "></iframe>
şu css stilini ekleyebilirsiniz: 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>
@Chams'ın uzattığı @nathanielperales cevabını şimdi benim tarafımdan uzattığım.
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'));
});
En basit olanı :
<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>
Bunu betiğinize ekleyin:
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
});
}
İşte benim sorunum için çözüm, ben bir WP sitesi inşa edildi, bu yüzden burada biraz php kodu var. Ancak anahtar scrollwheel: false,
harita nesnesindedir.
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
});
}
Umarım bu yardımcı olur. Şerefe
scrollwheel
olarak ayarlayınfalse
.