Отключить инерцию / импульс перетаскивания в Google Maps V3 - PullRequest
7 голосов
/ 11 августа 2011

Есть ли способ отключить инерцию перетаскивания в Google Maps V3? Похоже, это должен быть MapOption, но я не могу найти способ сделать это.

Ответы [ 4 ]

5 голосов
/ 07 октября 2016

Используйте недокументированную опцию disablePanMomentum , например:

new google.maps.Map(document.getElementById(id), {
    disablePanMomentum: true,
    backgroundColor: 'none',
    disableDefaultUI: true,
    center: {
        lat: 40.674,
        lng: -73.945
    },
    zoom: 2,
    ...
4 голосов
/ 17 декабря 2013

Я столкнулся с этой же проблемой сегодня, когда некоторые пользовательские элементы 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 голосов
/ 16 августа 2011

В настоящее время это невозможно сделать с помощью API Карт V3.Подумайте о том, чтобы подать запрос на функцию здесь:

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

0 голосов
/ 21 сентября 2016

Я почти уверен, что возможно хотя бы противодействовать импульсу. Кто-нибудь, пожалуйста, поправьте меня, если я ошибаюсь! Например, для простоты, скажем, ваш контейнер карт имеет width из 100vw и height из 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));
    };
};

Приведенный выше код на самом деле работает, но главное, что он работает только один раз, пока браузер не будет перегружен и не выдаст ошибку Uncaught RangeError: превышен максимальный размер стека вызовов .

Не уверен, что теперь делать.

Подробнее об этом здесь .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...