Leaflet işaretçisi üzerinde sağ tıklamayla olay yayılımını nasıl durdurabilirim?


9

Leaflet işaretleyicilerinde bir sağ tık olayı bulamadım, bu yüzden fareyle uğraşan olayı dinlemeye başladım. Bu olayı çözen yöntemde kontrol ediyorum

if (event.originalEvent.button == 2) {
    do_something();
    // now i want to stop propagation of the rightclick
    return;
}

Bu do_something () çağrıldığında çalışır, ancak olay haritaya yayılır ve bir bağlam menüsü gösterilir. Etkinliğin haritaya yayılmasını nasıl önleyebilirim?

Bu, tüm büyük (yani IE) tarayıcılarda çalışır mı?

Yanıtlar:


4

İlk cevabım görünüşte işe yaramıyordu ve şimdi aynı problemle karşı karşıya olduğum için. İşte yeni bir yaklaşım:

Broşür adlı bir olayı destekler contextmenu. Buradaki Leaflet olay belgelerinde görüldüğü gibi .

Kullanıcı harita üzerinde sağ fare düğmesine bastığında kullanılır, varsayılan tarayıcı bağlam menüsünün bu olayda dinleyici olup olmadığını göstermesini engeller .

Teorik olarak kod

marker.on('contextmenu', function(e) {
  this.openPopup();
});

iyi çalışmalı. Ama görünüşe göre uygulama belgelerin gerisinde kalıyor. (Talimatı 0.4.5) Şu an itibariyle contextmenuolay görünüşe göre değil o Çoklu çizgi nesneler üzerinde mükemmel çalışıyor olsa da, henüz belirteçler desteklenir.

Boru hattında yakın gelecekte bu özelliğin etkinleştirilmesi için çalışmalar var gibi görünüyor ( buradaki ve buradaki tartışmalara bakın ). Sanırım, Leaflet'in bu konuda hızlı bir şekilde çalışmasını ve bir sonraki sürümde etkinliği etkinleştirmesini umabiliriz ...

Düzenleme: Uygulama için beklediğim hakkında söylediklerimi dikkate almayın. En son geliştirme ana dalını indirir ve kendiniz broşür hazırlarsanız contextmenu, işaretçilerdeki etkinlikler için tam destek alırsınız . Mutlu kodlama.


4

IE ve diğer tüm tarayıcılarda varsayılan davranışı önleme:

event.returnValue = false;
if (event.preventDefault) event.preventDefault();

Çalışmıyor gibi görünüyor. Bunu Leaflet'te test ettin mi? Etkinliğiniz bir broşür etkinliği mi yoksa tarayıcı tarafından başlatılan orijinal DOMMouseEvent mi?
mrg

Bu bir DOM etkinliği içindir. Leaflet olayları sararsa event.originalEvent öğesini kullanın.
tmcw

4

Bu dahili işlevi deneyin:

L.DomEvent.stopPropagation(event);

Hile yapmalı.

PS Ben bunu herhangi bir belge içinde buldum ama bir yama kullanılan gördüm. Kendi sorumluluğunuzdadır kullanın. ;)

Düzenleme: Bu dahili işlevi de buldum

L.DomEvent.preventDefault(event);

Hangi event.preventDefault()jQuery ile aynı gibi görünüyor .


Snippet'inizi kullandım, ama olan şey tmcw'nin çözümü ile aynı. İşaretçimi sağ tıklıyorum. Dinleme yöntemine gider. Orada işaretleyiciyi kaldırır (bu benim için doğru tıklamanın yapması gereken şeydir) ve sonra tüm işaretleyici şey gerçekleşmemiş gibi tıkladığım haritada bir bağlam menüsü açılır.
mrg

Şans eseri bunu buldum L.DomEvent.preventDefault(event);. Gördüğüm kadarıyla (Leaflet.js kaynağına bakarak) bu preventDefault()jQuery tarafından sağlanan çok benzer olmalıdır ... Deneyin! :)
fgysin Monica

Denedim, ama bir html sayfasında sağ tıkladığında ben FF olsun standart bağlam menüsü haşhaş tutar.
mrg

2

Olayı durdurmak için tesadüfen bir çözüm buldum.

Örneğin, böyle bir etkinlik oluşturulursa - map.on("click", onMapClick);etkinlik bu kodla durdurulabilir -map.off("click", onMapClick);

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.