我正在处理一个WordPress网站,作者通常在大多数文章中使用iFrames嵌入Google地图。
是否有一种使用Javascript在所有这些地图上禁用鼠标滚轮缩放的方法?
我正在处理一个WordPress网站,作者通常在大多数文章中使用iFrames嵌入Google地图。
是否有一种使用Javascript在所有这些地图上禁用鼠标滚轮缩放的方法?
我遇到了同样的问题:当滚动页面时,指针移到地图上时,地图开始缩放而不是继续滚动页面。 :(
所以我解决了这个问题,在每个gmap iframe
插入之前放置一个带有.overlay
的div
,如下所示:
<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>
在我的CSS中,我创建了这个类:
.overlay {
background:transparent;
position:relative;
width:640px;
height:480px; /* your iframe height */
top:480px; /* your iframe height */
margin-top:-480px; /* your iframe height */
}
z-index
以便正确地叠加它。 - RCNeilnone
,div被设置为对事件不透明而不是透明。 我错过了什么吗? - fraxture我尝试了讨论中的第一个答案,但无论我怎么做都不起作用,所以我想出了自己的解决方案:
将iframe用类(.maps在此示例中)包装起来,并最好使用embedresponsively代码:http://embedresponsively.com/ — 更改iframe的CSS为pointer-events: none
,然后使用jQuery的click函数到父元素,您可以将iframes CSS更改为pointer-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");
});
我相信有一种仅使用JavaScript的方法可以实现这个,如果有人想要添加,请随意。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
会防止与地图的任何交互(拖动、导航、点击等)。 - LuBre$(this).find('iframe').css("pointer-events", "auto");
。 - Tom Prats$("#map").on("mousewheel DOMMouseScroll", mouseRipple);
的东西,其中 mouseRipple 包含 $("#map_container").parent().trigger(e);
如果您仍希望它滚动。 - mpag我扩展了 @nathanielperales 的解决方案。
以下是行为描述:
以下是 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);
这里是一个 jsFiddle 的示例链接。
$('.maps.embed-container').find('iframe').css("pointer-events", "none");
- lhermann我正在重新编辑#nathanielperales编写的代码,它对我非常有效。简单易懂,但只能工作一次。所以我在JavaScript中添加了mouseleave()。这个想法来自#Bogdan,现在它完美了。试试看。感谢#nathanielperales和#Bogdan。我只是将两个想法结合起来。谢谢你们。我希望这也能帮助其他人...
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");
});
灵活应变 - 适应 - 克服
这里是一个jsFiddle示例。
pointer-events: auto
来避免点击?即当鼠标进入 iframe 时启动计时器,并在鼠标离开时重置它。如果计时器达到 X 毫秒,则切换到 pointer-events: auto
。每当鼠标离开 iframe 时,只需切换回 pointer-events: none
。 - stucampbell是的,这很容易。我曾经遇到过类似的问题。只需向iframe div添加CSS属性"pointer-events"并将其设置为'none'。
例子:< iframe style="pointer-events:none" src= ........ >
附注:此修复程序将禁用地图上的所有其他鼠标事件。因为我们不需要地图上的任何用户交互,所以它对我有用。
var mapOptions = {
scrollwheel: false,
center: latlng,
mapTypeId: google.maps.MapTypeId.ROADMAP
};
经过一些研究,你有两个选项。由于新地图API与iframe嵌入似乎不支持禁用鼠标滚轮。
第一个选择是使用旧版的Google地图(https://support.google.com/maps/answer/3045828?hl=en)。
第二个选择是创建一个JavaScript函数来简化每个评论的地图嵌入,并使用参数(这只是示例代码,仅指定位置而不显示确切解决方案)。
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 */
}
我刚刚在developers.google.com注册了一个账户,并获取了调用Maps API所需的令牌,只需要像这样禁用滚轮即可(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
});
}
有一种很棒而且简单的解决方案。
您需要在CSS中添加一个自定义类,将指针事件设置为地图画布无效:
.scrolloff{
pointer-events: none;
}
然后,使用jQuery,您可以根据不同的事件添加和删除该类,例如:
$( 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
});
});
我已在jsfiddle创建了一个示例,希望能帮助到您!
pointer-events: none
应用于<iframe>
即可禁用鼠标滚轮。<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>
$(function() {
$('#gmap-holder').click(function(e) {
$(this).find('iframe').css('pointer-events', 'all');
}).mouseleave(function(e) {
$(this).find('iframe').css('pointer-events', 'none');
});
})
scrollwheel
设为false
。 - Anto Jurković