在我的谷歌地图应用程序中,我有一个跟随移动标记的方法。当它跟随我想要允许缩放所有常用方法(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);
我理想的解决方案是,如果有disableDoubleClickPan
和disableScrollwheelPan
或draggable
选项实际阻止任何类型的拖动
修改
适用于所有设备,桌面设备和移动设备。
答案 0 :(得分:18)
我是这样做的:
var options = {
draggable: false,
scrollwheel: false,
panControl: false,
maxZoom: Zoom,
minZoom: Zoom,
zoom: Zoom,
center: latlng,
mapTypeId: google.maps.MapTypeId.ROADMAP
};
如您所见,将maxZoom和minZoom设置为相同的值有助于阻止用户的双击事件。
答案 1 :(得分:2)
虽然有可能认为双击地图或轮换地图不需要考虑鼠标位置(因为你是在地图对象而不是地图上的某个位置),捏到 - 缩放始终取决于位置,因为您在一个位置周围拉伸或挤压地图。改变这种行为将明显不直观。
在这种情况下,您应该听取zoom_changed
或idle
,然后将地图平移到最近,以便用户可以看到正在发生的事情。
你甚至可以使用这些事件来处理默认的双击或鼠标滚轮行为,这样很明显你正在改变用户通常拥有的控制级别。
答案 2 :(得分:2)
我最终选择了一系列选项。首先,我必须覆盖发生的桌面事件以获得我的成果(触摸,双击,双击左键和鼠标滚轮)。
在触摸屏设计上,当有两次以上的触摸时,我暂停了对标记的所有更新。这意味着当变焦操作时,任何捏合事件都不会跳跃。
在普通的网络桌面设备上,我禁用了地图上的缩放和双击事件,并重写了我自己的事件处理程序。
为了区分它们,我检查了窗口对象中的ontouchstart事件。
function setDraggable(draggable) {
if ("ontouchend" in document) {
return;
}
var options = {
draggable: draggable,
panControl: draggable,
scrollwheel: draggable
};
this.map.setOptions(options);
},
zoom_changed
或idle
个事件由于以下几个原因而不是真正的选项:
idle
事件仅在地图空闲时被调用,并且我正在执行的动画量从未被调用过。zoom_changed
事件在动画帧之前调用重定位器。