在Google Maps V3上禁用拖动惯性/动量

时间:2011-08-10 23:14:41

标签: google-maps google-maps-api-3

有没有办法在谷歌地图V3上禁用拖曳惯性?看起来它应该是一个MapOption,但我找不到任何方法来做到这一点。

4 个答案:

答案 0 :(得分:5)

使用未记录的选项{{1}} ,例如:

{{1}}

答案 1 :(得分:4)

今天我遇到了同样的问题,在地图上方浮动的一些自定义Div需要重新定位在Map Movement上。我的重新定位工作正常,只要用户在拖动鼠标之后完全停止(因此没有动量),但如果只是快速拖动并释放div,则最终会稍微关闭。

为了解决这个问题,我迷上了拖拽事件和空闲事件:

var map = /* All the map config */
var stickyCenter = map.getCenter();
/* ... Code ... */
google.maps.event.addListener(map, 'drag', function(){ stickyCenter = map.getCenter(); });
google.maps.event.addListener(map, 'idle', function() { map.setCenter(stickyCenter); });

发生的事情是,在你拖动并且地图停止后(动量完成后)地图“快照”回到原位。

如果捕捉太突然,可能会以某种方式对动作进行平移或动画制作。希望有所帮助,它并不完美,但它是一种扭转阻力事件动力的方法。

答案 2 :(得分:2)

目前无法使用Maps API V3。考虑在此处提交功能请求:

http://code.google.com/p/gmaps-api-issues/

答案 3 :(得分:0)

我很确定至少可以反击这种势头。如果我错了,请有人纠正我!例如,为了简单起见,假设您的地图容器的width 100vwheight 100vh。您只需在getCenter()事件调用的函数中调用mouseup,然后立即使用这些坐标setCenter()

function initMap(){

    ...

    var win = window;
    google.maps.event.addDomListener(win, 'mouseup', setCoords);
    function setCoords(){
        var x = myMap.getCenter();
        var lat = x.lat();
        var lng = x.lng();
        myMap.addListener('center_changed', function(lat, lng){
        myMap.setCenter(new google.maps.LatLng(lat, lng));
    };
};

上面的代码实际上有效,但是它的唯一作用是它只能运行一次,直到浏览器看起来过载并产生错误未捕获RangeError:超出最大调用堆栈大小

不知道现在该做什么。

有关此 here 的更多信息。