簡體   English   中英

負載標記彈出窗口上的OpenLayers

[英]OpenLayers on Load Markers Popup

我正在使用OpenLayers查看地圖,但標記的彈出窗口有問題。 加載標記時,我為它們分配了moouseover和mouseout兩個事件,但是當這些事件觸發任何標記時,即使我將鼠標懸停在其他標記上,也只會顯示第一個創建的標記的彈出窗口。 就像我只為第一個標記創建這些事件,而不是為所有標記創建事件。有什么想法嗎? 謝謝

var listMarkers = getMarkers();

        for (var i = 0; i < listMarkers.length; i++) {
            var size = new OpenLayers.Size(21, 25);
            var offset = new OpenLayers.Pixel(-(size.w / 2), -size.h);
            var icon;
            if (listMarkers[i].Icon.trim() === "red") {
                icon = new OpenLayers.Icon
                ('http://www.openlayers.org/dev/img/marker.png', size, offset);
            }
            else {
                icon = new OpenLayers.Icon
                ('http://www.openlayers.org/dev/img/marker-' + listMarkers[i].Icon.trim() + '.png', size, offset);
            }

            var mark = new OpenLayers.Marker(new OpenLayers.LonLat(listMarkers[i].Longitude,
                listMarkers[i].Latitude).transform(new OpenLayers.Projection("EPSG:4326"),
            map.getProjectionObject()), icon);

            //here add mouseover event
            mark.events.register('mouseover', mark, function (evt) {
                popup = new OpenLayers.Popup.FramedCloud("Popup",
                    new OpenLayers.LonLat(listMarkers[i].Longitude,
                listMarkers[i].Latitude).transform(new OpenLayers.Projection("EPSG:4326"),
            map.getProjectionObject()),
                    null,
                    '<div><b>' + listMarkers[i].Title + '</b><br/>' + listMarkers[i].Description + '</div>',
                    null,
                    false);
                map.addPopup(popup);
            });
            //here add mouseout event
            mark.events.register('mouseout', mark, function (evt) { popup.hide(); });
            markers.addMarker(mark);
        }

在創建彈出窗口時發生的mouseover事件中,您引用的是listMarkers[i] ,它在javascript范圍內將記住給定變量i的最后一個值,因此,對於每個彈出窗口,它將從listMarkers[listMarkers.length-1]獲取信息。 要解決此問題,請將詳細信息(標題,緯度,經度)添加到標記對象( mark.data.Title = listMarkers[i] )中,然后在事件處理程序中從evtthis對象中讀取它們(在其中進行設置) register通話)。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM