Sayfayı kaydırırken haritanın kaydırılmasını önleme


10

Bir HTML sayfası bir harita içerdiğinde ve kullanıcı fare tekerleğini kullanarak sayfayı aşağı kaydırdığında, kullanıcının faresi harita üzerinden geçtiğinde, haritanın kendisi kaydırılırken sayfanın kaydırılması durur. Demo1'e bakınız .

ArcGIS Server JS API 3.x kullanarak Google Haritalar için basit bir kullanılabilirlik hilesi ile ayrıntılı olarak açıklanan davranışı taklit etmek istiyorum .

Olduğunu, sayfa kaydırma yapmalıdırlar kullanıcı açıkça bu durumda harita, içinde sürükler sürece haritası kaydırmak gerekir .

Davranış, fareniz haritanın üzerinde olsa bile sayfanın kaydırıldığı Demo2'de neredeyse oradadır .

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

Ancak, haritayı ilk kez bir kez tıklamazsanız, fare düğmesini bırakmazsanız ve ardından kaydırmazsanız harita kaydırması etkinleştirilmez. Blog yayınında Google Haritalar ile gösterilen kesintisiz efekti elde etmek mümkün müdür?

Denedim mouse-drag, mouse-drag-startve mouse-downolaylar ancak davranış, tüm olaylar için aynıdır.


1
Etkinliği enableMapNavigationyeniden başlattıktan hemen sonra ne zaman deneyebileceğinizi deneyebilirsiniz mouse-drag-start. Dojotoolkit.org/reference-guide/1.10/dojo/Evented.html olayları yayınlamak için bir dojo sınıfı olarak buldum . Böylece harita üzerinde sürükleyebilirsiniz (veya tıklayabilirsiniz) -> harita navigasyonunu etkinleştir -> aynı işlevde drag olayını çağırır (sadece çağırabilir veya parametreler gerektirebilir) -> iş sürüklemeye devam edebilirsiniz. Fareyi alıp sürükleyebilir. Bu olayları farklı düzenlerde denemenin bir kombinasyonu olabilir.
Branco

Yanıtlar:


2

Dis / enableScrollWheelZoom yöntemi yerine dis / enableMapNavigation yöntemini kullanmak için asla bir neden belirtmezsiniz . İkincisini kullanın.


Ne yazık ki bu işe yaramaz çünkü (1) haritanın varsayılan davranışı kaydırma tekerleği kullanıldığında yatay kaydırma (yakınlaştırma değil) ve (2) map.disablePan();kaydırma tekerleği için geçerli değildir, sadece sürüklemek için sürükleyin: jsfiddle.net/g7npfuvn/16
Stephen Lead

Ah, sorun şu ki, Mac'te test ediyordum, burada smartNavigationetkili oluyor: Doğru olduğunda, izleme paneli veya sihirli fare kullanımı olan Apple bilgisayarlar için, yakınlaştırma yerine tavaları kaydırın . Bunu false olarak ayarlar ve bir PC'de test edersem çalışır. Yani bu Mac'te ArcGIS Server JS API'sinin bir sınırlaması gibi görünüyor.
Stephen Lead

Değeri false olarak ayarlarsanız, os + donanımından bağımsız olarak aynı davranışı görmeniz gerekir. Bir mousemove olayı dinlemeyi ve burada yapılanlara benzer şekilde smartNav'ı kapatmayı algıladıktan sonra düşünün .
Zack
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.