【发布时间】:2017-05-15 13:47:12
【问题描述】:
在使用 LeafletJS 时,我无法将弹出窗口绑定到第二个标记,第一个标记工作得非常好,有帮助吗?这是我的 JavaScript 代码:
var map = L.map('mapScene', {
zoomControl: false,
attributionControl: false,
}).fitWorld();
var playerIcon = L.icon({
iconUrl: 'img/playermarker.png',
shadowUrl: 'img/marker-shadow.png',
iconSize: [25, 41],
iconAnchor: [12, 41],
popupAnchor: [1, -34],
shadowSize: [41, 41]
});
var itemsIcon = L.icon({
iconUrl: 'img/crate.png',
shadowUrl: 'img/marker-shadow.png',
iconSize: [45, 46], // size of the icon
shadowSize: [50, 64], // size of the shadow
iconAnchor: [22, 94], // point of the icon which will correspond to marker's location
shadowAnchor: [10, 117], // the same for the shadow
popupAnchor: [1, -34],
});
L.tileLayer('http://stamen-tiles-{s}.a.ssl.fastly.net/watercolor/{z}/{x}/{y}.{ext}', {
minZoom: 14,
maxZoom: 14,
attribution: 'Map tiles by <a href="http://stamen.com">Stamen Design</a>, <a href="http://creativecommons.org/licenses/by/3.0">CC BY 3.0</a> — Map data © <a href="http://www.openstreetmap.org/copyright">OpenStreetMap</a>',
subdomains: 'abcd',
ext: 'png'
}).addTo(map);
var playerMarker;
function onLocationFound(e) {
var radius = e.accuracy / 2;
playerMarker = L.marker(e.latlng, {
icon: playerIcon
}).addTo(map).bindPopup("Hey i'm you!");
addMarkers();
}
function addMarkers(){
alert();
L.marker(playerMarker + 2, {
icon: itemsIcon
}).addTo(map).bindPopup("").on('popupopen', function() {
alert();
});
}
function onLocationError(e) {
alert(e.message);
}
map.on('locationfound', onLocationFound);
map.on('locationerror', onLocationError);
map.locate({
setView: true,
maxZoom: 16
});
通过函数“addMarkers()”添加的第二个标记显示得非常好,但是 .bindpopup 根本不起作用。您可以单击标记,但什么也没有显示,警报也没有。
【问题讨论】:
-
L.marker(playerMarker + 2, ...对我来说很奇怪。你能解释一下你想用你的标记做什么吗?为什么需要在locationfound事件上添加两个标记? -
@JulienV 只是简单地在玩家标记附近添加标记,尽管这与问题无关。
-
您的浏览器控制台说什么?就像@JulienV 暗示的那样,您的代码可能会抛出错误。
-
@ghybs 刚刚检查过,我的代码没有抛出任何错误。
-
jsfiddle.net/3v7hd2vx/298 除了丢失的图像,请参阅
TypeError: latlng is null由于playerMarker + 2行
标签: javascript dictionary geolocation leaflet marker