在嵌入式Google地图上禁用鼠标滚轮缩放


198

我在WordPress网站上工作,在大多数帖子中,作者通常使用iFrame嵌入Google Maps。

有没有一种方法可以使用Javascript通过鼠标滚轮禁用缩放功能?


32
将地图选项设置scrollwheelfalse
AntoJurković2014年

或直接通过JS禁用它:map.disableScrollWheelZoom();
Th3Alchemist

4
恐怕你做不到。由于安全限制,因此无法对地图进行脚本访问,而AFAIK没有可用的URL参数,您可以选择禁用它。
Dr.Molle

有完全一样的问题。要禁用嵌入iframe地图的鼠标滚动事件。还没找到。
Grzegorz 2014年

7
这是嵌入式地图,不确定为什么人们会发布使用地图JS库的解决方案
zanderwar

Answers:


255

我遇到了同样的问题:滚动页面时,指针移到地图上方,它开始放大/缩小地图,而不是继续滚动页面。:(

所以我解决了这个问题div.overlay在每次iframe插入gmap之前都放置了一个精确的a ,请参阅:

<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 */
}

div将覆盖地图,从而防止指针事件到达该地图。但是,如果单击div,它将对指针事件透明,从而再次激活地图!

希望对您有所帮助:)


9
这是一个很好的解决方案。就我而言,我必须指定一个z-index,以使其正确覆盖。
RCNeil 2014年

1
IMO是解决此问题的最佳解决方案!我们面对这个问题已经很长时间了,这使得它成为了一个不错且非常干净的可重用修复程序!
迭戈·帕拉迪诺

11
这应该标记为答案,尽管可能更容易将叠加层设置为绝对定位到父容器,然后仅将宽度100%高度100%设置为父容器,也不需要背景属性。
2014年

3
我创建了一个非常简单的jQuery插件来自动执行此操作。检查它在github.com/diazemiliano/mapScrollOff
埃米利亚诺·迪亚斯

8
是否有一种简单的方法来扩展此解决方案,以便忽略滚轮事件,但不忽略左键单击?此解决方案很好,但是要求用户在地图顶部单击两次“方向”超链接(一次进入div,然后再次单击超链接本身。)
jptsetme 2015年

136

在这个讨论中,我尝试了第一个答案,但是无论我做什么,它都对我不起作用,所以我想出了自己的解决方案:

用类(在此示例中为.maps)包装iframe,并理想地嵌入响应代码:http ://embedsensitively.com/- 将iframe的CSS更改为pointer-events: none,然后使用jQuery的click函数更改为父元素,即可更改iframe 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可以做到这一点。

重新激活指针事件的JavaScript方法非常简单。只需给iFrame提供一个ID(即“ iframe”),然后将一个onclick事件应用于cointainer div:

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>

4
感谢您提供“无API”解决方案。+1
严刑拷打

21
您还可以添加此属性,以在鼠标离开时将其恢复为原始状态:$('。maps')。mouseleave(function(){$('。maps iframe')。css(“ pointer-events”,“没有”); });
路易斯

5
请注意:使用pointer-events: none会阻止与地图的任何交互(拖动,导航,点击等)。
LuBre 2015年

@LuBre是的,可以理解,这就是为什么有jQuery click函数将其更改为auto的原因。
nathanielperales 2015年

1
好答案!您要确保启用正确的地图,而不是页面上的全部地图$(this).find('iframe').css("pointer-events", "auto");
Tom Prats

54

我扩展了@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


1
谢谢您的sn窃。最后,我将其与以下添加项一起使用:$('.maps.embed-container').find('iframe').css("pointer-events", "none");
lhermann '16

感谢您的代码。它实际上解决了我遇到的另一个问题。我嵌入了Google Spreadsheet中的一些图表,并且由于某些原因,用鼠标滚轮滚动了整个页面,使其停止工作。您的代码使它再次使用鼠标滚轮滚动。再次感谢。
Scott M. Stolz

31

我正在重新编辑#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示例。


1
最干净的解决方案。真好!但是所有解决方案都有一个问题:用户必须单击两次地图。如何才能立即通过点击,因此只需点击一下即可?
罗兰(Loren)2015年

1
也许您可以通过pointer-events: auto仅在鼠标“悬停”在地图上一定时间后才切换到来避免单击?也就是说,当鼠标进入iframe时启动计时器,并在鼠标离开时将其重置。如果计时器变为X毫秒,请切换到pointer-events: auto。每当鼠标离开iframe时,您只需切换回即可pointer-events: none
stucampbell,2015年

无论如何,我更喜欢使用dblclick而不是click。
Moxet Khan

25

是的,这很容易。我遇到了类似的问题。只需将css属性“ pointer-events”添加到iframe div并将其设置为'none'即可

示例:<iframe style =“ pointer-events:none” src = ........>

注意:此修复程序将禁用地图上的所有其他鼠标事件。它对我有用,因为我们不需要在地图上进行任何用户交互。


20
那为什么不只使用图像呢?您正在加载很多额外的资产,只是要禁用所有功能。
deweydb 2014年

2
是的,但是我无法单击小部件
Jeffrey NicholsonCarré2014年


@deweydb-那不合法吗?
马特·桑德斯

@MattSaunders不确定当时是否是这种情况,但现在是这样。您可以直接从Google API加载静态地图图像,也许这就是deweydb的建议?肯定是解决该问题的可行方法。
azariah

19
var mapOptions = {
   scrollwheel: false,
   center: latlng,
   mapTypeId: google.maps.MapTypeId.ROADMAP
};

13

经过研究后,您有两种选择。由于嵌入了iframe的新地图API似乎不支持禁用鼠标滚轮。

首先是使用旧版Google地图(https://support.google.com/maps/answer/3045828?hl=zh-CN)。

第二个方法是创建一个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 */
}

8

有一个很棒且简单的解决方案。

您需要在CSS中添加一个自定义类,该类将指针事件设置为将canvas映射为none:

.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中创建了一个示例,希望对您有所帮助!


1
这也适用于Google Maps Embed API-只需用嵌入的iframe替换map_canvas。请注意,click事件在外部元素上,但是滚动在内部元素上(在answer / jsfiddle中是正确的,以防万一您转录而不是复制/粘贴)
Jxtps 2014年

8

我只是在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
        });
    }

比jQuery骇客好多了!
丹尼尔KIS纳吉

7

这是我的方法。我发现很容易在各种网站上实施并一直使用

CSS和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中,您需要将iframe包裹在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>

希望这对寻求简单解决方案的人有所帮助。


5

这是一个简单的解决方案。只需将pointer-events: noneCSS设置为<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>

如果要在用户单击地图时激活鼠标滚动,请使用以下JS代码。当鼠标移出地图时,它还将再次禁用鼠标滚动。

$(function() {
    $('#gmap-holder').click(function(e) {
        $(this).find('iframe').css('pointer-events', 'all');
    }).mouseleave(function(e) {
        $(this).find('iframe').css('pointer-events', 'none');
    });
})

!!! 还要注意,Imho 指针事件 禁用了该Iframe的所有单击事件
stephanfriedrich 2015年

点击事件仅针对iframe禁用。但是,如果您使用的是JS代码,则一旦鼠标进入div.gmap-holder,click事件就会再次被激活。
manish_s 2015年

这对我来说非常出色!大多数解决方案都与WordPress不兼容:擦洗了onclick,有时并没有遵守iframe的宽度,但这确实很吸引人。放下JS代码后,只需参考id =“ gmap-holder”。完善。谢谢Manish。
usonianhorizo​​n

4

要在嵌入式Google Maps上禁用鼠标滚轮缩放,只需将iframe的css属性指针事件设置为none即可:

<style>
#googlemap iframe {
    pointer-events:none;
}
</style>

多数民众赞成在..漂亮整洁吧?

<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>

2
它还将禁用双击缩放:)
w3debugger

还禁用放大,缩小,方向等功能
zanderwar '16

4

好吧,对我而言,最好的解决方案是像这样简单地使用:

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>

结果

注意事项:

最好的做法是添加一个带有深色透明文字的覆盖层:停用鼠标滚轮时,单击浏览 ”; 但是当其被激活(单击后)时,带有文字的透明性将消失,用户可以浏览地图符合预期。有什么线索怎么做?


3

添加样式可以pointer-events:none;正常工作

<iframe style="pointer-events:none;" src=""></iframe>

3

最简单的方法是使用类似:before或的伪元素:after
此方法不需要任何其他html元素或jquery。
例如,如果我们具有以下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>

然后我们要做的就是使包装器相对于我们将要创建的伪元素以防止滚动

.map_wraper{
    position:relative;
}

之后,我们将创建伪元素,将其放置在地图上以防止滚动:

.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;
}

至此,没有jQuery,没有多余的html元素了!这是一个工作的jsfiddle示例:http : //jsfiddle.net/e6j4Lbe1/


聪明的主意。但是,与其他一些答案一样,它可以捕获所有内容,而不仅仅是鼠标滚轮事件。
likeitlikeit 2015年

我很高兴它帮助了您!
Andrei 2015年

3

这是我的简单解决方案。

例如,将iframe放入一个名为“ maps”的类的div中。

这将是您iframe的CSS

.maps iframe { pointer-events: none }

这是一个小小的javascript,当您将div元素悬停至少1秒钟时,它将iframe的指针事件属性设置为“自动”(最适合我-将其设置为任意值)并清除超时/当鼠标离开元素时,再次将其设置为“ none”。

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");
});

干杯。


3

我创建了一个非常简单的jQuery插件来解决该问题。在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>


2

使用@nathanielperales的答案,我已经添加了悬停功能,对我来说,它在用户失去对地图的关注以停止再次滚动时效果更好:)

$(function(){
    $('.mapa').hover(function(){
        stopScroll();},
                     function () {
    $('.mapa iframe').css("pointer-events", "none");
    });
});

function stopScroll(){
$('.mapa').click(function () {
    $('.mapa iframe').css("pointer-events", "auto");
});
}

关键是我们失去了导航功能,对我来说在移动设备中非常重要。我创建了一个非常简单的jQuery插件,您可以根据需要进行修改。检查它在github.com/diazemiliano/mapScrollOff
埃米利亚诺·迪亚斯

2

主题的变体:使用jQuery的简单解决方案,无需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
});

悬停侦听器附加到父元素,因此,如果当前父元素更大,则只需在第三行之前用div包装iframe。

希望对别人有用。


1

我自己偶然发现了这个问题,并在此问题上使用了两个非常有用的答案的混搭形式: czerasz的答案和massa的答案。

他们都有很多道理,但是在我的测试中,我发现其中一个不适用于移动设备,并且对IE的支持不佳(仅适用于IE11)。这是nathanielperales的解决方案,然后是czerasz扩展的解决方案,它依赖于指针事件css,并且在移动设备上不起作用(移动设备中没有指针),并且非v11的任何版本的IE上均不起作用。通常我不会在乎,但是那里有大量的用户,我们想要一致的功能,所以我选择了覆盖解决方案,使用包装器使编码更容易。

因此,我的标记如下所示:

<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>

然后的样式是这样的:

.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*/
}

最后,脚本:

//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);

如果您想从GitHub那里获取东西,我也将经过测试的解决方案添加到GitHub要点中


1

这是使用CSS和Javascript(即Jquery,但也可用于纯Javascript)的解决方案。同时,地图响应。滚动时避免地图缩放,但可以通过单击激活地图。

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 */
} 

玩得开心 !


1

现在,您可以在Google Maps v3中禁用滚动缩放功能,从而带来更好的用户体验。其他地图功能仍然可以使用,您不需要额外的div。我还认为应该为用户提供一些反馈,以便他们可以看到何时启用了滚动功能,因此我添加了地图边框。

// 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')
  });
};

1

这将为您提供响应迅速的Google Map,该地图将停止iframe上的滚动,但是一旦单击即可进行缩放。

将其复制并粘贴到您的html中,然后将iframe链接替换为您自己的链接。他是其中的一篇文章,提供了一个示例:在嵌入式Google Map iframe上禁用鼠标滚轮缩放

<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>

0

这是我的解决方法。

将其弹出到我的main.js或类似文件中:

// 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');

然后,只需在希望地图显示在页面上的位置插入一个空div。

<div id="map"></div>

您显然显然也需要调用Google Maps API。我只是创建了一个名为mapi.js的文件,并将其扔到我的/ js文件夹中。需要在上述javascript之前调用此文件。

`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文件时,请确保将其传递给sensor false属性。

即: <script type="text/javascript" src="js/mapi.js?sensor=false"></script>

API的新版本3由于某种原因要求包含传感器。确保在main.js文件之前包含mapi.js文件。


0

对于Google Maps v2-GMap2:

ar map = new GMap2(document.getElementById("google_map"));
map.disableScrollWheelZoom();

0

如果您拥有使用Google Map Embedded API的iframe,例如:

 <iframe width="320" height="400" frameborder="0" src="https://www.google.com/maps/embed/v1/place?q=Cagli ... "></iframe>

您可以添加以下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>

0

这是我对@nathanielperales答案的看法,由@chams扩展,现在又由我扩展。

的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'));
});

0

最简单的一个

<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>

0

将此添加到您的脚本:

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
});
}

2
问题是关于Embed API(使用iframe),而不是JavaScript API。
GreatBlakes

0

这是我针对该问题的解决方案,我正在构建一个WP网站,因此这里有一些php代码。但是关键是scrollwheel: false,在地图对象中。

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
        });
    }

希望这会有所帮助。干杯

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.