Google地图禁用所有活动的用户平移

geo*_*ips 23 javascript google-maps google-maps-api-3

在我的谷歌地图应用程序中,我有一个跟随移动标记的方法.当它跟随我想要允许缩放所有常用方法(dblclick,dblleftclick,mousewheel和触摸事件),我想禁用任何类型的平移.问题是在使用鼠标滚轮缩放并使用dblclick时,地图会被平移到鼠标的位置.我可以禁用一切,但我想允许缩放.我已经通过使用jquery鼠标滚轮插件并使用增量来更改缩放来解决鼠标滚轮问题.

是否有一些简单的方法可以做到这一点,还是我必须为所有不同的触摸和鼠标事件编写一个监听器?

编辑

我已经禁用了双击,鼠标滚轮缩放和拖动但我希望仍然有双击功能.我也想要那里的触摸事件,但我想让它们从中心放大,而不是从事件发生的地方放大.真正的问题是复制谷歌已经处理的事件,但稍微改变了功能

var options = {
    disableDoubleClickZoom: true,
    draggable: false,
    scrollwheel: false,
    panControl: false
};

this.map = new google.maps.Map(document.getElementById('map'), options);
Run Code Online (Sandbox Code Playgroud)

我理想的解决方案是,如果有一个disableDoubleClickPan和/ disableScrollwheelPandraggable实际选项阻止任何类型的拖动

编辑

这适用于所有设备,桌面和移动设备.

小智 18

我是这样做的:

var options = {
    draggable: false,
    scrollwheel: false,
    panControl: false,
    maxZoom: Zoom,
    minZoom: Zoom,
    zoom: Zoom,
    center: latlng,
    mapTypeId: google.maps.MapTypeId.ROADMAP
};
Run Code Online (Sandbox Code Playgroud)

如您所见,将maxZoom和minZoom设置为相同的值有助于阻止用户的双击事件.


geo*_*ips 3

我最终选择了多种选择的组合。首先,我必须覆盖为获得所实现的结果而发生的桌面事件(触摸、双击、左键双击和鼠标滚轮)。

在触摸屏设备上,当触摸次数超过两次时,我暂停了对标记的所有更新。这意味着变焦操作时任何捏合事件都不会跳跃。

在普通的网络桌面设备上,我禁用了地图上的缩放和双击事件,并重写了我自己的事件处理程序。

为了区分它们,我检查了 window 对象中的 ontouchstart 事件。

function setDraggable(draggable) {
    if ("ontouchend" in document) {
        return;
    }
    var options = {
        draggable: draggable, 
        panControl: draggable, 
        scrollwheel: draggable 
    };
    this.map.setOptions(options);
},
Run Code Online (Sandbox Code Playgroud)

zoom_changed由于以下几个原因, 或事件idle并不是一个真正的选择:

  1. idle事件仅在地图空闲时被调用,并且我正在执行的动画量从未被调用。
  2. 每一步的动画都将地图重新​​定位到随后的标记上,因此该zoom_changed事件将在动画帧之前调用重新定位器。
  3. 由于动画量很大,不平移到中心的想法是为了减少动画帧并提高性能。