Leaflet: Add a link to the markers

前端 未结 3 447
青春惊慌失措
青春惊慌失措 2021-01-12 02:47

Pretty simple question: How can I make the map markers in Leaflet clickable and route the user to an other page? Every marker has its own page.

I\'ve tried the follo

相关标签:
3条回答
  • 2021-01-12 03:30

    i found a similar code which may help you. here is jsfiddle link http://jsfiddle.net/farhatabbas/qeJ78/

     $(document).ready(function () {
            init_map();
            add_marker();
        });
        var map;
    
        function init_map() {
            map = L.map('map').setView([37.8, -96], 4);
            L.tileLayer('http://{s}.tile.cloudmade.com/{key}/22677/256/{z}/{x}/{y}.png', {
                attribution: 'Map data © 2011 OpenStreetMap contributors, Imagery © 2012 CloudMade',
                key: 'BC9A493B41014CAABB98F0471D759707'
            }).addTo(map);
        }
    
        function add_marker() {
            var points = [
                ["P1", 43.059908, -89.442229, "http://www.url_address_01.com/"],
                ["P2", 43.058618, -89.442032, "http://www.url_address_02.com/"],
                ["P3", 43.058618, -86.441726, "http://www.url_address_03.com/"]
            ];
            var marker = [];
            var i;
            for (i = 0; i < points.length; i++) {
                marker[i] = new L.Marker([points[i][1], points[i][2]], {
                    win_url: points[i][3]
                });
                marker[i].addTo(map);
                marker[i].on('click', onClick);
            };
        }
    
        function onClick(e) {
            console.log(this.options.win_url);
            window.open(this.options.win_url);
        }
    
    0 讨论(0)
  • 2021-01-12 03:44

    Okay, I finally came to a solution; when a marker is added to the map it gets assigned an ID called "_leaflet_id". This can be fetched through the target object, and also set to a custom value after it has been added to the map.

    So the final solution is simply:

    var x = markers.length;
    
    while(x--)
    {
        L.marker(markers[x].coords).on('click', function(e) {
            window.location = markers[e.target._leaflet_id].uri;
        }).addTo(map)._leaflet_id = x;
    }
    

    (I replaced the for-in loop with a reversed while loop)

    0 讨论(0)
  • 2021-01-12 03:47

    You could also use a popup which can display HTML

    marker.bindPopup(htmlString);

    0 讨论(0)
提交回复
热议问题