[英]Change icon on leaflet
根據這個問題: https : //gis.stackexchange.com/questions/54651/change-marker-icon-on-click-using-leaflet ,我做了這個:
// onEachFeature
function onEachFeature(feature, layer) {
layer.on('click', function (e) {
// change icon
console.log(layer.options.icon);
e.target.setIcon(myIconReplc);
});
}
var myIconReplc = L.Icon.extend({
options: {
iconUrl: "../resources/img/map/icons/orange/ambulance.png",
iconSize: [30,35],
shadowUrl: "../resources/img/map/icons/shadow.png",
shadowAnchor: [8, 20],
shadowSize: [25, 18],
iconSize: [20, 25],
iconAnchor: [8, 30] // horizontal puis vertical
}
});
我有這個錯誤: Uncaught TypeError: undefined is not a function
怎么了 ?
您應該創建實例(在myIconReplc
之前添加new
), 例如 ,像這樣
var myIconReplc = L.Icon.extend({
options: {
iconUrl: "../resources/img/map/icons/orange/ambulance.png",
iconSize: [30,35],
shadowUrl: "../resources/img/map/icons/shadow.png",
shadowAnchor: [8, 20],
shadowSize: [25, 18],
iconSize: [20, 25],
iconAnchor: [8, 30] // horizontal puis vertical
}
});
layer.on('click', function (e) {
e.target.setIcon(new myIconReplc);
});
您忘記了聲明myIconReplc
的new
實例。
更改:
e.target.setIcon(myIconReplc);
至:
e.target.setIcon(new myIconReplc);
如果您希望能夠像Leaflet中的大多數類一樣聲明一個沒有new
圖標的圖標,您可以這樣做:
// Normal extending
var MyIconReplc = L.Icon.extend({
options: {
iconUrl: "../resources/img/map/icons/orange/ambulance.png",
iconSize: [30,35],
shadowUrl: "../resources/img/map/icons/shadow.png",
shadowAnchor: [8, 20],
shadowSize: [25, 18],
iconSize: [20, 25],
iconAnchor: [8, 30] // horizontal puis vertical
}
});
// Shorthand
var myIconReplc = function (options) {
return new MyIconRepl(options);
}
現在你可以這樣做:
var icon = new MyIconReplc();
和:
var icon = myIconReplc();
您可能已經注意到,在不使用new關鍵字的情況下創建了Leaflet對象。 這是通過使用小寫工廠方法補充每個類來實現的
請參閱: http : //leafletjs.com/reference.html#class (在Class工廠下)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.