【问题标题】:Leaflet custom layer controlLeaflet 自定义图层控件
【发布时间】:2018-06-04 14:14:20
【问题描述】:

我正在尝试将默认的传单图层控件替换为自定义的。

我关注了另一篇关于创建自定义图层控件的帖子。

我能够传递层名称,并且我已经使用 console.log 进行了检查。

但是取消选中该复选框不会删除该图层。

  var firstLayer = omnivore.kml( 'localtions.kml' )
.on( 'ready', function() {
    map.fitBounds( firstLayer.getBounds() );

    firstLayer.eachLayer( function( layer ) {

        if ( layer instanceof L.Marker ) {
            layer.setIcon( layerIcon );
        }


        layer.on( 'click', function( e ) {
            document.getElementById( "location_img" ).innerHTML = '<img src="img/large/logo.png" height="60"><br>';
            document.getElementById( "location_name" ).innerHTML = layer.feature.properties.name;
            $( "#feature_info" ).stop();
            $( "#feature_info" ).fadeIn( "fast" );

            console.log( layer.feature.properties.name );
            $( "#feature_info" ).fadeOut( 5000 );

        } );
    } );
} )
.addTo( map );

    <div id="layercontrol">
      <label><input type="checkbox" data-layer="firstLayer">First Layer</label>
      </div>

    <script>
          $('div#layercontrol input[type="checkbox"]').on('change', function() {    
        var checkbox = $(this);
        var layer = checkbox.data().layer; 

        console.log(layer);

        // toggle the layer
        $('#checkbox').change(function() {
      if ($(this).is(':checked')) {
            map.addLayer(layer);
        } else {
            map.removeLayer(layer);
        }

    })
    });
    </script>

【问题讨论】:

标签: javascript leaflet layer


【解决方案1】:

您看起来在复选框上有 2 个嵌套的 change 函数 - 可能不是您想要的。试试这个....

<div id="layercontrol">
 <label><input type="checkbox" data-layer="firstLayer">First Layer</label>
</div>

<script>
      $('div#layercontrol input[type="checkbox"]').on('change', function() {    
    var checkbox = $(this);
    var layer = checkbox.data().layer; 

    console.log(layer);

    // toggle the layer

  if ($(this).is(':checked')) {
        map.addLayer(layer);
    } else {
        map.removeLayer(layer);
    }


});
</script>

【讨论】:

  • @David 因为分配给layer 的字符串"firstLayer" 不是传单层。
  • @ghybs 那我需要做什么?
  • @ghybs 我在帖子中添加了一层。
猜你喜欢
  • 2012-06-21
  • 1970-01-01
  • 2020-11-06
  • 2021-09-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-11-03
相关资源
最近更新 更多