javascript - 如何使用 Leaflet 的脉冲图标动态切换颜色
问题描述
鉴于下面的代码,我使用L.icon.pulse在我的地图中添加了一个非脉冲标记:
m = L.geoJSON(metaFeatures, {
pointToLayer: function (feature, latlng) {
var pulsingIcon = L.icon.pulse({
iconSize: [3, 3],
color: color,
fillColor: color,
animate: false,
});
var pulseMarker = L.marker(coordinates, { icon: pulsingIcon });
return pulseMarker;
//...
},
});
稍后当我希望将其更改animate:false
为animate:true
并将颜色更改为red
.
注意:如果标记是:
var circle = L.circleMarker(latlng, geojsonMarkerOptions);
我可以做到:layer.setStyle({fillColor:'blue'});
这将解决问题,但由于这是一个L.Marker
无法做到的。
解决方案
在 Leaflet 中,实例L.Marker
没有任何.setStyle()
方法,但它们确实有.setIcon()
方法。
因此,您可以创建多个实例L.Icon
并让您的标记使用其中一个,例如:
var map = new L.Map('leaflet', {
layers: [
new L.TileLayer('https://{s}.tile.openstreetmap.org/{z}/{x}/{y}.png', {
'attribution': 'Map data © <a href="http://openstreetmap.org">OpenStreetMap</a> contributors'
})
],
center: [0, 0],
zoom: 0
});
var blueIcon = L.icon.pulse({ color: "blue", fillColor: "blue", animate: false});
var redIcon = L.icon.pulse({ color: "red", fillColor: "red", animate: true});
var mymarker = L.marker([0,0], {icon: blueIcon}).addTo(map);
L.DomEvent.on(document.getElementById('change-to-red'), 'click', function(){
mymarker.setIcon(redIcon);
})
#leaflet { min-height: 300px; }
<link type="text/css" rel="stylesheet" href="https://unpkg.com/leaflet/dist/leaflet.css" />
<link type="text/css" rel="stylesheet" href="https://unpkg.com/leaflet-pulse-icon@0.1.0/src/L.Icon.Pulse.css" />
<script src="https://unpkg.com/leaflet/dist/leaflet-src.js"></script>
<script src="https://unpkg.com/leaflet-pulse-icon@0.1.0/src/L.Icon.Pulse.js"></script>
<div id="leaflet"></div>
<button id='change-to-red'>Change to red!</button>
推荐阅读
- javascript - 上传多个文件/图像,获取,formData
- python - pydantic:对具有别名的字段使用 property.getter 装饰器
- css - 模糊滤镜未按预期工作(模糊滤镜不会更新以匹配渐变动画)
- javascript - 使用 this 访问静态函数
- html - 为什么我的 Bootstrap 4 网格的列的高度和宽度不一样?
- c# - LINQ 效率
- flutter - 如何在颤动中映射动态列表
- python - 加载模型后学习性能提升
- reactjs - .env 文件和 create-react-app 的问题 - 返回未定义
- byte - 来自字节串的 Scapy 以太网数据包丢失了顶层信息