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

 超人懒懒_673 发布于 2023-01-21 23:54

我正在使用WordPress网站,作者通常在大多数帖子中使用iFrame嵌入Google地图.

有没有办法使用Javascript通过鼠标滚轮禁用所有这些缩放?

11 个回答
  • 是的,很容易.我遇到了类似的问题.只需将css属性"pointer-events"添加到iframe div并将其设置为"none"即可.

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

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

    2023-01-26 02:45 回答
  • 我扩展了@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.

    2023-01-26 06:04 回答
  • 我只是在developers.google.com上注册了一个帐户,并获得了一个用于调用Maps API的令牌,并且只是禁用它(滚动: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
            });
        }
    

    2023-01-26 06:35 回答
  • var mapOptions = {
       scrollwheel: false,
       center: latlng,
       mapTypeId: google.maps.MapTypeId.ROADMAP
    };
    

    2023-01-26 07:33 回答
  • 有一个很棒的简单解决方案.

    您需要在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中创建了一个例子,希望有所帮助!

    2023-01-26 08:12 回答
  • 这是一个简单的解决方案.只需将pointer-events: noneCSS 设置<iframe>为禁用鼠标滚动即可.

    <div id="gmap-holder">
        <iframe   frameborder="0" 
                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');
        });
    })
    

    2023-01-26 08:44 回答
  • 我在这次讨论中尝试了第一个答案,无论我做了什么,它都不适合我,所以我提出了自己的解决方案:

    用一个类(本例中为.maps)包装iframe,理想情况下嵌入代码:http://embedresponsively.com/ - 将iframe的CSS更改为pointer-events: none然后使用jQuery的click函数到父元素,你可以更改iframes css至pointer-events:auto

    HTML

    <div class='embed-container maps'>
        <iframe   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(即"iframe")提供一个ID,然后将onclick事件应用于该铸币器div:

    onclick="document.getElementById('iframe').style.pointerEvents= 'auto'"
    
    <div class="maps" onclick="document.getElementById('iframe').style.pointerEvents= 'auto'">
       <iframe id="iframe" src=""   frameborder="0"  allowfullscreen></iframe>
    </div>
    

    2023-01-26 09:16 回答
  • 这是我的方法.我发现很容易在各种网站上实现并一直使用它

    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"   frameborder="0"  allowfullscreen></iframe></div>
    2023-01-26 10:03 回答
  • 做了一些研究后,你有2个选择.由于嵌入了iframe的新地图api似乎不支持禁用鼠标滚轮.

    首先是使用旧的谷歌地图(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 */
    }
    

    2023-01-26 10:28 回答
  • 我正在重新编辑#nathanielperales编写的代码,它真的对我有用.简单易捕,但只工作一次.所以我在JavaScript上添加了mouseleave().改编自#Bogdan的想法现在它完美无缺.试试这个.积分归#nathanielperales和#Bogdan所有.我只是结合了两个想法.感谢你们.我希望这也能帮助别人......

    HTML

    <div class='embed-container maps'>
        <iframe   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示例.

    2023-01-26 11:14 回答
  • 我遇到了同样的问题:当滚动页面然后指针变成地图时,它开始放大/缩小地图而不是继续滚动页面.:(

    所以,我解决了这个把一个div带有.overlay完全相同每个GMAP之前iframe插入,请参阅:

    <html>
      <div class="overlay" onClick="style.pointerEvents='none'"></div>
      <iframe src="https://mapsengine.google.com/map/embed?mid=some_map_id"  ></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,它对指针事件变得透明,再次激活地图!

    我希望得到你的帮助:)

    2023-01-26 11:50 回答
撰写答案
今天,你开发时遇到什么问题呢?
立即提问
热门标签
PHP1.CN | 中国最专业的PHP中文社区 | PNG素材下载 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有