【问题标题】:Change (and change back) leaflet icon on click单击时更改(和更改回)传单图标
【发布时间】:2013-08-01 14:46:03
【问题描述】:

我已经让图标在点击时更改,但我需要在点击新图标时将其更改回原始图标(而不是保持新图标)。

例如,假设我所有的图标都是蓝色的。当我点击一个图标时,我希望它变成一个红色图标。然后,当我点击一个新图标时,我希望之前点击的图标变回蓝色。

我可以让它与 mouseover 和 mouseout 一起使用,但我真的需要它与 click 一起使用。我想我需要记录一个新的点击函数,但我不确定如何。

这是我目前拥有的:

function clickFeature(e) {
        var layer = e.target;
        e.target.setIcon(stop);

        info.update(layer.feature.properties);
    }


    var geojson;

    /*function resetHighlight(e) {
        geojson.resetStyle(e.target);
        e.target.setIcon(arms);
        info.update();
    }*/

    function onEachFeature(feature, layer) {
        layer.on({
            click: clickFeature
        });
    }
    geojson = L.geoJson(crossingData, {

        pointToLayer: function (feature, latlng) {
            return L.marker(latlng, {icon: arms});
        },
        onEachFeature: onEachFeature

    }).addTo(map);

【问题讨论】:

    标签: onclick icons leaflet


    【解决方案1】:

    您可以尝试在函数之外定义单独的变量,该变量将保存当前单击的标记。

    var clickedMarker;
    
    function clickFeature(e) {
        if(clickedMarker) {
              clickedMarker.setIcon(arms);
        }
        var layer = e.target;
        e.target.setIcon(stop);
        clickedMarker = e.target;
    
        info.update(layer.feature.properties);
    }
    

    【讨论】:

    • info.update(layer.feature.properties); 这是干什么用的?
    【解决方案2】:

    您应该获得当前图标以更改为另一个图标。不幸的是L.marker 没有getIcon() 方法,但您可以通过options.icon 访问它。

    function clickFeature(e) {
        var layer = e.target;
        layer.setIcon(layer.options.icon == arms ? stop : arms);
    }
    
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2022-10-05
    • 2015-06-27
    • 2014-02-16
    • 2018-06-07
    • 2021-12-12
    • 2023-03-12
    • 1970-01-01
    相关资源
    最近更新 更多