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

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 . Используйте последнее.

Zack
источник
К сожалению, это не работает, потому что (1) поведение карты по умолчанию - это панорамирование (не масштабирование), когда используется колесо прокрутки, и (2) map.disablePan();не применяется к колесу прокрутки, только перетаскивание: jsfiddle.net/g7npfuvn/16
Стивен Лид
Ах, проблема в том, что я тестировал на Mac, где smartNavigationдействует: если это правда, для компьютеров Apple с трекпадом или волшебной мышью, проведите панорамированием вместо увеличения . Если я установлю это в false и протестирую на ПК, это будет работать. Похоже, что это ограничение JS API ArcGIS Server на Mac.
Стивен Лид
Если вы установите значение false, то вы должны увидеть одинаковое поведение независимо от аппаратного обеспечения os +. Рассмотрите возможность прослушивания события перемещения мыши и при обнаружении отключите SmartNav, подобно тому, как это было сделано здесь .
Зак