Javascript 在传单中的事件回调中设置层类名
我希望通过设置geojson特性的Javascript 在传单中的事件回调中设置层类名,javascript,svg,leaflet,Javascript,Svg,Leaflet,我希望通过设置geojson特性的className来设置它的样式。如果将其直接放置在特征上,则效果非常好,如下所示: L.geoJson(geojson, { onEachFeature: function (feature, layer) { layer.setStyle({className: 'grid-cell'}); } }).addTo(map); 使用.css文件中定义的样式 path.grid-cell{ stroke-opacity: 1
className
来设置它的样式。如果将其直接放置在特征上,则效果非常好,如下所示:
L.geoJson(geojson, {
onEachFeature: function (feature, layer) {
layer.setStyle({className: 'grid-cell'});
}
}).addTo(map);
使用.css文件中定义的样式
path.grid-cell{
stroke-opacity: 1;
stroke: #444;
fill: #aaa;
}
但是,如果在功能的事件回调中添加,则它不起作用:
L.geoJson(geojson, {
onEachFeature: function (feature, layer) {
layer.on('click', function(e){
this.setStyle({className: 'grid-cell'});
this.bringToFront();
});
}
}).addTo(map);
令人惊讶的是setStyle({})除了类名
,例如颜色
,填充不透明度
,重量
等,code>在任何情况下都适用
例如
知道上面是什么吗?说明此问题。有关此问题的讨论,请参见此处:。评论之一:
我认为setStyle实际上不应该更改类名。该类并不是真正的样式属性,处理传单-
类所需的逻辑似乎是一种攻击。我认为setClassName()
或add
/removeClass
API更合适
嗯,是的,这很有道理。能够使用.css处理向量样式,而不是将其隐藏在javascript中,这是非常有用的。我会留意最新消息。谢谢你的推荐。
L.geoJson(geojson, {
onEachFeature: function (feature, layer) {
// this works
layer.setStyle({color: '#faa', fillOpacity: 0.4, weight: 1});
// this works too
layer.setStyle({className: 'grid-cell'});
layer.on('click', function(e){
// and this works
layer.setStyle({color: '#afa', fillOpacity: 0.4, weight: 2});
// BUT THIS DOES NOT WORK
this.setStyle({className: 'grid-cell'});
this.bringToFront();
});
}
}).addTo(map);