javascript - Leaflet 自定义图层控件
问题描述
我正在尝试用自定义的替换默认的传单层控件。
我关注了另一篇关于创建自定义图层控件的帖子。
我能够通过层名称,我已经用 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>
解决方案
您看起来change
在复选框上有 2 个嵌套函数 - 可能不是您想要的。尝试这个....
<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>
推荐阅读
- javascript - Vue应用程序中的静音更新无限循环
- javascript - 如何使用http请求根据规则访问firebase实时数据库
- reactjs - React 路由器正在堆叠路由
- python - 根据索引填写数据
- javascript - 如何将单个对象迭代到定义格式内的多个对象的新数组中
- python - 我使用 Kivy UrlReguest 下载并显示 Json 文件,但在 android 上没有任何效果,为什么?
- c# - 检测 C# 表单外的鼠标点击
- node.js - 如何在 NestJS 和 Jest 中测试 .map() 函数
- python - 在python中将大文件(500MB +)编码为base64
- tensorflow - 使用我的自定义损失函数时出现此错误:“张量”对象没有属性“_numpy”