Як запобігти панорамуванню карти під час прокрутки сторінки


10

Коли на HTML-сторінці міститься карта, і користувач прокручує сторінку вниз за допомогою колеса миші, коли миша користувача переходить на карту, сторінка перестане прокручуватися, тоді як сама карта буде панувати. Дивіться Demo1 .

Я хотів би наслідувати поведінку, детально описану в простому фокусі зручності використання для Карт Google за допомогою API ArxGIS Server 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 у публікації блогу?

Я спробував mouse-drag, mouse-drag-startі mouse-downподія , але поведінка є однаковим для всіх подій.


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

Відповіді:


2

Ви ніколи не даєте причин використовувати метод dis / enableMapNavigation, а не метод dis / enableScrollWheelZoom . Використовуйте останнє.


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

Так, проблема полягає в тому, що я тестував на Mac, де smartNavigationнабуває чинності: коли це правда, для комп'ютерів Apple, які використовують трекпад або чарівну мишу, проведіть пальцями замість масштабування . Якщо я встановив це значення false, і тестувати на ПК, він працює. Так виглядає, що це обмеження API ArcGIS Server JS на Mac.
— Стівен Ведучий

Якщо ви встановите значення false, тоді вам слід бачити однакову поведінку незалежно від обладнання OS +. Подумайте про прослуховування події в русі мишею та при виявленні відключення smartNav, як це було зроблено тут .
— Зак
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.