Harita içinde gezinmek için broşür haritasında kaydırma / sürüklemeyi devre dışı bırak


25

Haritanın içinde gömülü bir div kutusunun üstüne tıklayıp sürüklediğinizde kaydırmayı nasıl bastıracağını bilen var mı?

Örneğin , burada , göstergenin üstüne tıklayıp sürüklediğinizde, harita sizinle birlikte sürüklenir. Bu işlevi bastırmak istiyorum. Bu tekniğin olup olmadığının farkındayım, ancak bunun tek yol olup olmadığını bilmek istiyorum:

map.dragging.disable();

Bir jQuery .hover dinleyicisini kullanarak (sürüklemeyi devre dışı bırakmak ve etkinleştirmek için handlerIn ve handlerOut kullanarak) benzer bir işlevsellik geliştirdim. Bunun sizin için bir seçenek olup olmadığından emin değilsiniz: api.jquery.com/hover
— evv_gis

Yanıtlar:


20

Leaflet web sitesindeki örneği kullanarak ,L.Control nesnenin nerede örneklendiğine dikkat edin info; bu <div>haritanın vurgulu etkileşimi ile ilişkili sağ üstteki kutudur. İşte index.htmlLeaflet örneğinden tanımlandığı yer :

    // control that shows state info on hover
    var info = L.control();

    info.onAdd = function (map) {
        this._div = L.DomUtil.create('div', 'info');
        this.update();
        return this._div;
    };

    info.update = function (props) {
        this._div.innerHTML = '<h4>US Population Density</h4>' +  (props ?
            '<b>' + props.name + '</b><br />' + props.density + ' people / mi<sup>2</sup>'
            : 'Hover over a state');
    };

    info.addTo(map);

Bir kullanıcının imleci bu <div>kutunun içindeyken sürüklemeyi devre dışı bırakmak için nesneyi içeren HTMLElement(bir <div>öğeye) bir olay dinleyicisi ekleyin L.Control:

    // Disable dragging when user's cursor enters the element
    info.getContainer().addEventListener('mouseover', function () {
        map.dragging.disable();
    });

    // Re-enable dragging when user's cursor leaves the element
    info.getContainer().addEventListener('mouseout', function () {
        map.dragging.enable();
    });

Daha önceki örnek mapolarak tanımlanmış olan geri çağırma L.Map.


Teşekkürler @Arthur, bu yaklaşıma aşinayım. Birinin css kullanarak işaretçi-olaylarında olduğu gibi bir çözüm önerebileceğini umuyordum: otomatik ya da işaretçi-olaylar: hiçbiri ya da benim gibi çalışmayan bir şey. Eğer hiç kimse daha iyi bir çözüm yollamazsa, size en iyi çözüm olduğu anlamına geleceği için çek vereceğim.
— Bay Concolato

Bunu da görmek isterim. CSS bu problemi çözebilseydi daha iyi olurdu, ama hangi elementi pointer olaylarını yönetmeli? leaflet-controlElementi içerdiği leaflet-containereleman ve ikinci tetik zum ve kaydırma bu hadiseleri alma edilir.
— Arthur

Ben boşuna ilgisizlik div koymak için çalışıyordum.
— Bay Concolato

Evet, bu mantıklı: <div>ilgi konusu leaflet-control, içinde olduğu bir çocuktur leaflet-container. Olaylar leaflet-container, çocuk ( leaflet-control) öncesi ebeveyn ( ) tarafından alınır .
— Arthur

19

Buna alternatif bir çözüm, JavaScript ile olay yayılımını durdurmaktır (Leaflet kontrolleri için olduğu gibi, örneğin yakınlaştırma düğmeleri):

var div = L.DomUtil.get('div_id');
if (!L.Browser.touch) {
    L.DomEvent.disableClickPropagation(div);
    L.DomEvent.on(div, 'mousewheel', L.DomEvent.stopPropagation);
} else {
    L.DomEvent.on(div, 'click', L.DomEvent.stopPropagation);
}
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.