Como impedir que o mapa seja panorâmico ao rolar a página

10

Quando uma página HTML contém um mapa e o usuário rola a página para baixo usando a roda do mouse, quando o mouse passa sobre o mapa, a página para de rolar enquanto o próprio mapa se desloca. Veja Demo1 .

Gostaria de imitar o comportamento detalhado em Um truque simples de usabilidade para o Google Maps usando a API JS do ArcGIS Server 3.x.

Ou seja, a página deve rolar , a menos que o usuário arraste explicitamente dentro do mapa; nesse caso, o mapa deve ser panorâmico .

O comportamento está quase presente no Demo2 , onde a página rola mesmo que o mouse esteja sobre o mapa.

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();
  });
});

No entanto, o panorama do mapa não está ativado, a menos que você clique uma vez no mapa, solte o botão do mouse e depois faça o panorama. É possível obter o efeito contínuo mostrado no Google Maps na postagem do blog?

Eu tentei os eventos mouse-drag, mouse-drag-starte mouse-downmas o comportamento é o mesmo para todos os eventos.

Stephen Lead
fonte
1
Você pode tentar quando você enableMapNavigationimediatamente após reinvocar o mouse-drag-startevento. Encontrei dojotoolkit.org/reference-guide/1.10/dojo/Evented.html como uma classe dojo para emitir eventos. Assim, você arrasta (ou clica) no mapa -> habilita a navegação no mapa -> na mesma função, invoca o evento de arrastar (pode ser capaz de invocar ou pode exigir parâmetros) -> continua arrastando seus negócios. Pode ser possível pegar o mouse e arrastar com ele. Pode ser apenas uma combinação de tentar esses eventos em diferentes ordens, etc. #
311

Respostas:

2

Você nunca fornece um motivo para usar o método dis / enableMapNavigation em vez do método dis / enableScrollWheelZoom . Use o último.

Zack
fonte
Infelizmente, isso não funciona porque (1) o comportamento padrão do mapa é deslocar ( map.disablePan();não aplicar zoom) quando a roda de rolagem é usada e (2) não se aplica à roda de rolagem, apenas arrastar para deslocar: jsfiddle.net/g7npfuvn/16
Stephen Lead
Ah, o problema é que eu estava testando em um Mac, onde smartNavigationentra em vigor: quando verdadeiro, para computadores Apple com trackpad ou mouse mágico, deslize o dedo em vez de aplicar zoom . Se eu definir como falso e testar em um PC, ele funcionará. Portanto, parece que isso é uma limitação da API JS do ArcGIS Server em um Mac.
Stephen Lead
Se você definir o valor como false, deverá ver o mesmo comportamento, independentemente do hardware os +. Considere ouvir um evento de remoção do mouse e, ao detectar, desative o smartNav, semelhante ao que foi feito aqui .
Zack