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
和/ disableScrollwheelPan
或draggable
实际选项阻止任何类型的拖动
编辑
这适用于所有设备,桌面和移动设备.
小智 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设置为相同的值有助于阻止用户的双击事件.
我最终选择了多种选择的组合。首先,我必须覆盖为获得所实现的结果而发生的桌面事件(触摸、双击、左键双击和鼠标滚轮)。
在触摸屏设备上,当触摸次数超过两次时,我暂停了对标记的所有更新。这意味着变焦操作时任何捏合事件都不会跳跃。
在普通的网络桌面设备上,我禁用了地图上的缩放和双击事件,并重写了我自己的事件处理程序。
为了区分它们,我检查了 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
并不是一个真正的选择:
idle
事件仅在地图空闲时被调用,并且我正在执行的动画量从未被调用。zoom_changed
事件将在动画帧之前调用重新定位器。