在传单上更改图标

JoD*_*iii 3 javascript 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
    }
});
Run Code Online (Sandbox Code Playgroud)

我有这个错误: Uncaught TypeError: undefined is not a function

怎么了 ?

---直播:http://www.monde-du-rat.fr/pmr/new.php#/carte

Ale*_* T. 8

您应该创建实例(new之前添加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
    }
});

layer.on('click', function (e) {
   e.target.setIcon(new myIconReplc);
});
Run Code Online (Sandbox Code Playgroud)


iH8*_*iH8 5

你忘了声明new你的myIconReplc.

改变:

e.target.setIcon(myIconReplc);
Run Code Online (Sandbox Code Playgroud)

到:

e.target.setIcon(new myIconReplc);
Run Code Online (Sandbox Code Playgroud)

如果您希望能够在没有newLeaflet 中的大多数类的情况下声明图标,您可以这样做:

// 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);
}
Run Code Online (Sandbox Code Playgroud)

现在你可以这样做:

var icon = new MyIconReplc();
Run Code Online (Sandbox Code Playgroud)

和:

var icon = myIconReplc();
Run Code Online (Sandbox Code Playgroud)

您可能已经注意到 Leaflet 对象是在不使用 new 关键字的情况下创建的。这是通过用小写工厂方法补充每个类来实现的

请参阅:http : //leafletjs.com/reference.html#class(在类工厂下)