2

レイヤーグループのポリラインをクリックできないようにする問題が発生しました...以下のコードでわかるように、リーフレットの組み込み関数を使用してレイヤーグループ(route.eachLayer)を通過し、スタイルを追加しようとします'クリック可能:false'ですが、これは何もしないようです...

//route = layergroup with all polylines
function disableclicking(){
    route.eachLayer(function(layer){
        layer.setStyle({clickable: false});
    });
}

私がこのコードを使おうとすると、何も変わらないようです(ループに入ります)、または少なくとも、私が望むものは変わりません...

私が欲しいのは、ポリラインのクラス'.leaflet-clickable'が削除されることです...そしてこれは起こらないようです。スタイルをクリック不可に変更しても、このクラスは変更されませんか、それともループに問題がありますか?

4

1 に答える 1

5

私も同様のニーズがあり、受け入れられた答えは質問とは何の関係もないので、私が思いついた解決策を投稿します(誰かがグーグルからここに到着した場合に備えて)。

function setClickable(target, value) {
    if(value && !target.options.clickable) {
        target.options.clickable = true;
        L.Path.prototype._initEvents.call(target);
        target._path.removeAttribute('pointer-events');
    } else if(!value && target.options.clickable) {
        target.options.clickable = false;

        // undoing actions done in L.Path.prototype._initEvents
        L.DomUtil.removeClass(target._path, 'leaflet-clickable');
        L.DomEvent.off(target._container, 'click', target._onMouseClick);
        ['dblclick', 'mousedown', 'mouseover', 'mouseout', 'mousemove', 'contextmenu'].forEach(function(evt) {
            L.DomEvent.off(target._container, evt, target._fireMouseEvent);
        });

        target._path.setAttribute('pointer-events', target.options.pointerEvents || 'none');
    }
}

setClickable(myLayer, false);
于 2015-02-26T13:36:37.853 に答える