【问题标题】:LeafletJS, can't bind popup to second markerLeafletJS,无法将弹出窗口绑定到第二个标记
【发布时间】: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> &mdash; Map data &copy; <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


【解决方案1】:

感谢@ghybs 的提琴。这是working fiddle。 我不知道您怎么会认为它可以与 playerMarker + 2 一起使用 latLng 但看来这是错误的。标记和整数之间的加法不起作用。

[编辑] 这是一段有趣的代码:

function onLocationFound(e) {
    var radius = e.accuracy / 2;
    playerMarker = L.marker(e.latlng).addTo(map).bindPopup("Hey i'm the first marker ");

    addMarkers();
}

function addMarkers() {
  //alert();
  var ll = playerMarker.getLatLng();
  var ll2 = L.latLng(ll.lat+12, ll.lng+12);
  var mm = L.marker(ll2).addTo(map);
  mm.bindPopup("Hey i'm the second marker");
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-06-18
    • 2023-03-16
    • 2022-08-26
    • 1970-01-01
    • 2014-04-30
    相关资源
    最近更新 更多