Как предотвратить панорамирование карты при прокрутке страницы


10

Когда страница HTML содержит карту, и пользователь прокручивает страницу с помощью колесика мыши, когда мышь пользователя проходит над картой, страница перестает прокручиваться, а сама карта перемещается. Смотрите Demo1 .

Я хотел бы эмулировать поведение, подробно описанное в Простом приеме юзабилити для Карт Google, с использованием ArcGIS Server JS API 3.x.

То есть страница должна прокручиваться, если пользователь явно не перетаскивает карту, и в этом случае карта должна перемещаться .

Такое поведение почти в Demo2 , когда страница прокручивается, даже если ваша мышь находится над картой.

map.on("load", function(){
  // Disable navigation by default, so scrolling the page doesn't scroll the map
  map.disableMapNavigation();

  // When the user tries to pan the map, allow this
  map.on('mouse-drag-start', function(){
    map.enableMapNavigation();
  });

  // Restore the no-scroll behaviour when the mouse leaves the map
  map.on('mouse-out', function(){
    map.disableMapNavigation();
  });
});

Тем не менее, панорамирование карты не будет включено, если вы сначала не нажмете один раз на карте, отпустите кнопку мыши, а затем проведете панорамирование. Можно ли добиться эффекта плавности, показанного с помощью Google Maps в записи блога?

Я пытался mouse-drag, mouse-drag-startи mouse-downсобытия, но поведение одинаково для всех событий.


1
Вы можете попробовать enableMapNavigationсразу же после повторного вызова mouse-drag-startсобытия. Я нашел dojotoolkit.org/reference-guide/1.10/dojo/Evented.html как класс dojo для генерации событий. Таким образом, вы должны перетащить (или щелкнуть) на карте -> включить навигацию по карте -> в той же функции вызвать событие перетаскивания (может быть в состоянии просто вызвать или могут потребоваться параметры) -> продолжить перетаскивание своего бизнеса. Это может быть в состоянии поднять на мышь вниз и перетащить с ним. Может быть, это просто комбинация из этих событий в разных порядках и т. Д.
— Бранко

Ответы:


2

Вы никогда не указываете причину использования метода dis / enableMapNavigation, а не метода dis / enableScrollWheelZoom . Используйте последнее.


К сожалению, это не работает, потому что (1) поведение карты по умолчанию - это панорамирование (не масштабирование), когда используется колесо прокрутки, и (2) map.disablePan();не применяется к колесу прокрутки, только перетаскивание: jsfiddle.net/g7npfuvn/16
— Стивен Лид

Ах, проблема в том, что я тестировал на Mac, где smartNavigationдействует: если это правда, для компьютеров Apple с трекпадом или волшебной мышью, проведите панорамированием вместо увеличения . Если я установлю это в false и протестирую на ПК, это будет работать. Похоже, что это ограничение JS API ArcGIS Server на Mac.
— Стивен Лид

Если вы установите значение false, то вы должны увидеть одинаковое поведение независимо от аппаратного обеспечения os +. Рассмотрите возможность прослушивания события перемещения мыши и при обнаружении отключите SmartNav, подобно тому, как это было сделано здесь .
— Зак
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.