Tôi đang làm việc trên một trang web WordPress nơi các tác giả thường nhúng Google Maps bằng iFrames trong hầu hết các bài đăng.
Có cách nào để vô hiệu hóa thu phóng qua bánh xe cuộn chuột trên tất cả chúng bằng Javascript không?
Tôi đang làm việc trên một trang web WordPress nơi các tác giả thường nhúng Google Maps bằng iFrames trong hầu hết các bài đăng.
Có cách nào để vô hiệu hóa thu phóng qua bánh xe cuộn chuột trên tất cả chúng bằng Javascript không?
Câu trả lời:
Tôi gặp vấn đề tương tự: khi cuộn trang sau đó con trỏ trở nên trên bản đồ, nó bắt đầu phóng to / thu nhỏ bản đồ thay vì tiếp tục cuộn trang. :
Vì vậy, tôi giải quyết này đặt một div
với một .overlay
chính xác trước mỗi GMap iframe
chèn, xem:
<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>
Trong CSS của tôi, tôi đã tạo lớp:
.overlay {
background:transparent;
position:relative;
width:640px;
height:480px; /* your iframe height */
top:480px; /* your iframe height */
margin-top:-480px; /* your iframe height */
}
Các div sẽ bao phủ bản đồ, ngăn chặn các sự kiện con trỏ đến nó. Nhưng nếu bạn nhấp vào div, nó sẽ trở nên trong suốt đối với các sự kiện con trỏ, kích hoạt lại bản đồ!
Tôi hy vọng được giúp đỡ bạn :)
z-index
thứ tự để nó phủ chính xác.
Tôi đã thử câu trả lời đầu tiên trong cuộc thảo luận này và nó không hiệu quả với tôi cho dù tôi có làm gì đi nữa nên tôi đã đưa ra giải pháp của riêng mình:
Kết hợp iframe với một lớp (.maps trong ví dụ này) và mã nhúng một cách lý tưởng: http://embedresponsively.com/ - Thay đổi CSS của iframe thành pointer-events: none
và sau đó sử dụng hàm nhấp chuột của jQuery thành phần tử cha, bạn có thể thay đổi iframes css đếnpointer-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");
});
Tôi chắc chắn rằng chỉ có một cách JavaScript để làm điều này, nếu ai đó muốn thêm vào điều này cảm thấy miễn phí.
Cách JavaScript để kích hoạt lại các sự kiện con trỏ khá đơn giản. Chỉ cần cung cấp Id cho iFrame (tức là "iframe"), sau đó áp dụng một sự kiện onclick cho 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
sẽ ngăn chặn mọi tương tác với bản đồ (kéo, điều hướng, nhấp chuột, v.v.).
$(this).find('iframe').css("pointer-events", "auto");
Tôi mở rộng giải pháp @nathanielperales.
Bên dưới mô tả hành vi:
Bên dưới mã 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");
Tôi đang chỉnh sửa lại mã được viết bởi #nathanielperales nó thực sự hiệu quả với tôi. Đơn giản và dễ bắt nhưng công việc của nó chỉ một lần. Vì vậy, tôi đã thêm mouseleave () trên JavaScript. Ý tưởng chuyển thể từ #Bogdan Và bây giờ nó hoàn hảo. Thử cái này. Tín dụng vào #nathanielperales và #Bogdan. Tôi chỉ kết hợp cả hai ý tưởng. Cảm ơn các bạn. Tôi hy vọng điều này cũng sẽ giúp những người khác ...
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");
});
Ứng thích ứng vượt qua
Và đây là một ví dụ jsFiddle.
pointer-events: auto
chỉ sau khi chuột đã "di chuột" trên bản đồ trong một thời gian nhất định? tức là bắt đầu hẹn giờ khi chuột vào iframe và đặt lại khi chuột rời. Nếu bộ đếm thời gian đạt đến X mili giây, hãy chuyển sang pointer-events: auto
. Và bất cứ khi nào chuột rời iframe bạn chỉ cần quay lại pointer-events: none
.
Vâng, nó khá dễ dàng. Tôi phải đối mặt với một vấn đề tương tự. Chỉ cần thêm thuộc tính css "con trỏ sự kiện" vào div iframe và đặt nó thành 'none' .
Ví dụ: <iframe style = "con trỏ-sự kiện: none" src = ........>
SideNote: Khắc phục sự cố này sẽ vô hiệu hóa tất cả các sự kiện chuột khác trên bản đồ. Nó hoạt động với tôi vì chúng tôi không yêu cầu bất kỳ tương tác người dùng nào trên bản đồ.
Sau khi thực hiện một số nghiên cứu, bạn có 2 lựa chọn. Vì api bản đồ mới với iframe nhúng dường như không hỗ trợ vô hiệu hóa con lăn chuột.
Đầu tiên sẽ là sử dụng bản đồ google cũ ( https://support.google.com/maps đá / 3045828? Hl = vi ).
Thứ hai sẽ là tạo một hàm javascript để đơn giản hóa việc nhúng bản đồ cho từng nhận xét và sử dụng các tham số (mã mẫu chỉ để vị trí điểm không hiển thị giải pháp chính xác)
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ó một giải pháp tuyệt vời và dễ dàng.
Bạn cần thêm một lớp tùy chỉnh trong css của mình để đặt các sự kiện con trỏ thành ánh xạ canvas thành không:
.scrolloff{
pointer-events: none;
}
Sau đó, với jQuery, bạn có thể thêm và xóa lớp đó dựa trên các sự kiện khác nhau, ví dụ:
$( 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
});
});
Tôi đã tạo một ví dụ trong jsfiddle , hy vọng điều đó có ích!
Tôi chỉ cần đăng ký một tài khoản trên developers.google.com và nhận mã thông báo để gọi API Bản đồ và chỉ cần vô hiệu hóa như thế này (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
});
}
Đây là cách tiếp cận của tôi. Tôi thấy nó dễ thực hiện trên các trang web khác nhau và sử dụng nó mọi lúc
CSS và 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>
Trong HTML, bạn sẽ muốn bọc iframe theo 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>
Hy vọng điều này sẽ giúp bất cứ ai tìm kiếm một giải pháp đơn giản.
Đây là một giải pháp đơn giản. Chỉ cần đặt pointer-events: none
CSS thành <iframe>
để vô hiệu hóa cuộn chuột.
<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>
Nếu bạn muốn cuộn chuột được kích hoạt khi người dùng nhấp vào bản đồ, thì hãy sử dụng mã JS sau đây. Nó cũng sẽ vô hiệu hóa cuộn chuột một lần nữa, khi chuột di chuyển ra khỏi bản đồ.
$(function() {
$('#gmap-holder').click(function(e) {
$(this).find('iframe').css('pointer-events', 'all');
}).mouseleave(function(e) {
$(this).find('iframe').css('pointer-events', 'none');
});
})
Để tắt thu phóng bánh xe cuộn chuột trên Google Maps được nhúng, bạn chỉ cần đặt các sự kiện con trỏ thuộc tính css của iframe thành không:
<style>
#googlemap iframe {
pointer-events:none;
}
</style>
Đó là tất cả .. Khá gọn gàng hả?
<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>
Đối với tôi, giải pháp tốt nhất là sử dụng đơn giản như thế này:
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>
Cân nhắc:
Cách tốt nhất là thêm lớp phủ có độ trong suốt tối hơn bằng văn bản: " Nhấp để duyệt " khi bánh xe chuột bị vô hiệu hóa Nhưng khi được kích hoạt (sau khi bạn nhấp vào nó) thì độ trong suốt của văn bản sẽ biến mất và người dùng có thể duyệt bản đồ như mong đợi. Bất kỳ manh mối làm thế nào để làm điều đó?
Cách đơn giản nhất để làm điều đó là sử dụng phần tử giả như :before
hoặc :after
.
Phương pháp này sẽ không yêu cầu bất kỳ phần tử html hoặc jquery bổ sung nào.
Nếu chúng ta có ví dụ về cấu trúc html này:
<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>
Sau đó, tất cả những gì chúng ta cần làm là tạo trình bao bọc liên quan đến phần tử giả mà chúng ta sẽ tạo để ngăn cuộn
.map_wraper{
position:relative;
}
Sau đó, chúng ta sẽ tạo phần tử giả sẽ được định vị trên bản đồ để ngăn việc cuộn:
.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;
}
Và bạn đã hoàn thành, không jquery không có yếu tố html bổ sung! Dưới đây là một ví dụ jsfiddle hoạt động: http://jsfiddle.net/e6j4Lbe1/
Đây là giải pháp đơn giản của tôi.
Đặt iframe của bạn trong div với một lớp gọi là "maps" chẳng hạn.
Đây sẽ là CSS cho iframe của bạn
.maps iframe { pointer-events: none }
Và đây là một javascript nhỏ sẽ đặt thuộc tính sự kiện con trỏ của iframe thành "tự động" khi bạn di chuột phần tử div trong ít nhất 1 giây (hoạt động tốt nhất với tôi - đặt thành bất cứ điều gì bạn thích) và xóa thời gian chờ / đặt lại thành "none" một lần nữa khi chuột rời khỏi phần tử.
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");
});
Chúc mừng.
Tôi đã tạo một plugin jQuery rất đơn giản để giải quyết vấn đề. Kiểm tra nó tại 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>
Sử dụng câu trả lời từ @nathanielperales tôi đã thêm chức năng di chuột cho tôi, nó hoạt động tốt hơn khi người dùng mất tập trung vào bản đồ để dừng cuộn lại :)
$(function(){
$('.mapa').hover(function(){
stopScroll();},
function () {
$('.mapa iframe').css("pointer-events", "none");
});
});
function stopScroll(){
$('.mapa').click(function () {
$('.mapa iframe').css("pointer-events", "auto");
});
}
Biến thể về một chủ đề: một giải pháp đơn giản với jQuery, không cần chỉnh sửa CSS.
// 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
});
Trình nghe Hover được gắn vào phần tử cha, vì vậy nếu cha mẹ hiện tại lớn hơn, bạn có thể chỉ cần bọc iframe bằng div trước dòng thứ 3.
Hy vọng nó sẽ hữu ích cho ai đó.
Tôi đã tự mình vấp phải vấn đề này và đã sử dụng một số bản hòa âm của hai câu trả lời rất hữu ích cho câu hỏi này: câu trả lời của czerasz và câu trả lời của massa .
Cả hai đều có rất nhiều sự thật, nhưng ở đâu đó trong các thử nghiệm của tôi, tôi phát hiện ra rằng một người không làm việc cho thiết bị di động và có hỗ trợ IE kém (chỉ hoạt động trên IE11). Đây là giải pháp của nathanielperales, sau đó được mở rộng bởi czerasz, dựa trên css sự kiện con trỏ và không hoạt động trên thiết bị di động (không có con trỏ trong thiết bị di động) và nó không hoạt động trên bất kỳ phiên bản IE nào không phải là v11 . Thông thường tôi sẽ không quan tâm, nhưng có rất nhiều người dùng ở ngoài đó và chúng tôi muốn có chức năng phù hợp, vì vậy tôi đã sử dụng giải pháp lớp phủ, sử dụng trình bao bọc để mã hóa dễ dàng hơn.
Vì vậy, đánh dấu của tôi trông như thế này:
<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>
Sau đó, các phong cách là như thế này:
.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*/
}
Cuối cùng là kịch bản:
//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);
Tôi cũng đã thêm giải pháp đã thử nghiệm của mình vào một ý chính GitHub , nếu bạn muốn lấy đồ từ đó ...
Đây là một giải pháp với CSS và Javascript (tức là Jquery nhưng cũng hoạt động với Javascript thuần túy). Đồng thời bản đồ là đáp ứng. Tránh bản đồ để phóng to khi cuộn, nhưng bản đồ có thể được kích hoạt bằng cách nhấp vào nó.
Javascript / 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 */
}
Chúc vui vẻ !
Trong Google Maps v3, giờ đây bạn có thể vô hiệu hóa cuộn để thu phóng, điều này dẫn đến trải nghiệm người dùng tốt hơn nhiều. Các chức năng bản đồ khác sẽ vẫn hoạt động và bạn không cần thêm div. Tôi cũng nghĩ rằng nên có một số phản hồi cho người dùng để họ có thể thấy khi cuộn được bật, vì vậy tôi đã thêm một đường viền bản đồ.
// 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')
});
};
Điều này sẽ cung cấp cho bạn Bản đồ Google phản hồi sẽ dừng cuộn trên iframe, nhưng khi nhấp vào sẽ cho phép bạn phóng to.
Sao chép và dán mã này vào html của bạn nhưng thay thế liên kết iframe bằng liên kết của riêng bạn. Đây là một bài viết về nó với một ví dụ: Vô hiệu hóa thu phóng bánh xe cuộn chuột trên iframe Google Map được nhúng
<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>
Đây sẽ là cách tiếp cận của tôi với điều này.
Đưa tệp này vào tệp main.js hoặc tệp tương tự của tôi:
// 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');
Sau đó, chỉ cần chèn một div trống nơi bạn muốn bản đồ xuất hiện trên trang của mình.
<div id="map"></div>
Rõ ràng bạn cũng sẽ cần gọi API Google Maps. Tôi chỉ đơn giản là tạo một tệp có tên mapi.js và ném nó vào thư mục / js của tôi. Tập tin này cần được gọi trước javascript trên.
`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");
})();`
Khi bạn gọi tệp mapi.js, hãy chắc chắn rằng bạn chuyển thuộc tính sai của cảm biến.
I E: <script type="text/javascript" src="js/mapi.js?sensor=false"></script>
Phiên bản mới 3 của API yêu cầu bao gồm cảm biến vì một số lý do. Đảm bảo bạn bao gồm tệp mapi.js trước tệp main.js của bạn.
Đối với google maps v2 - GMap2:
ar map = new GMap2(document.getElementById("google_map"));
map.disableScrollWheelZoom();
nếu bạn có iframe sử dụng API nhúng của Google map như thế này:
<iframe width="320" height="400" frameborder="0" src="https://www.google.com/maps/embed/v1/place?q=Cagli ... "></iframe>
bạn có thể thêm kiểu css này: con trỏ-sự kiện: 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>
Đây là câu trả lời của tôi về câu trả lời @nathanielperales được mở rộng bởi @chams, bây giờ lại được mở rộng bởi tôi.
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'));
});
Đơn giản nhất :
<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>
Thêm phần này vào tập lệnh của bạn:
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
});
}
Đây là giải pháp của tôi cho vấn đề này, tôi đang xây dựng một trang WP, vì vậy có một ít mã php ở đây. Nhưng chìa khóa là scrollwheel: false,
trong đối tượng bản đồ.
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
});
}
Hy vọng điều này sẽ giúp. Chúc mừng
scrollwheel
thànhfalse
.