【问题标题】:Cannot display a popup on hover over a route in mapbox将鼠标悬停在地图框中的路线上时无法显示弹出窗口
【发布时间】:2020-07-10 08:33:14
【问题描述】:

我在 mapbox 中有一条自定义线,当您单击它时会显示一个弹出窗口,我怎样才能使它仅在您悬停时显示?我从“click”更改为“mouseenter”,但它没有关闭弹出窗口。需要改变什么?

这是一个 jsfiddle 示例:https://jsfiddle.net/andrre/jb4czmew/4/

JS

mapboxgl.accessToken = 'pk.eyJ1IjoibWFya2V0aW5nYnNvIiwiYSI6ImNrYnYwZmk3YjAxZjgyem1wY2Zmc3F4Y2EifQ.gMF-eCCaAHHgWIUoRcnfkg';
    var map = new mapboxgl.Map({
        container: 'map',
        style: 'mapbox://styles/mapbox/streets-v11',
        center:  [-0.066985, 51.503363],
        zoom: 9
    });

map.on('load', function() {
        map.addSource('routeThree', {
            'type': 'geojson',
            'data': {
                'type': 'Feature',
                'properties': {},
                'geometry': {
                    'type': 'LineString',
                    'coordinates': [
                        [-0.066985, 51.503363],
                        [-3.550610, 40.390555 ],
                        [-77.140217, 38.801481],
                        [-118.175979, 34.008447]
                    ]
                }
            }
        });
        map.addLayer({
            'id': 'routeThree',
            'type': 'line',
            'source': 'routeThree',
            'layout': {
                'line-join': 'round',
                'line-cap': 'round'
            },
            'paint': {
                'line-color': '#04A5BD',
                'line-width': 8
            }
        });
   map.on('click', 'routeThree', function(e) {
            new mapboxgl.Popup()
            .setLngLat(e.lngLat)
            .setHTML("<h2>This is the third line that will explain something</h2>")
            .addTo(map);
         
         });
     
   
    });

【问题讨论】:

    标签: javascript mapbox mapbox-gl-js


    【解决方案1】:

    您的代码是正确的,但是其中有一个小错误,您为 Source 和 Layer 选择了相同的 id...只需在 map.addLayer 和 click 事件中以不同的方式调用它,它就可以工作fiddle

        mapboxgl.accessToken = 'pk.eyJ1IjoibWFya2V0aW5nYnNvIiwiYSI6ImNrYnYwZmk3YjAxZjgyem1wY2Zmc3F4Y2EifQ.gMF-eCCaAHHgWIUoRcnfkg';
        var map = new mapboxgl.Map({
            container: 'map',
            style: 'mapbox://styles/mapbox/streets-v11',
            center: [-0.066985, 51.503363],
            zoom: 9
        });
    
        map.on('load', function () {
            var popup;
            map.addSource('routeThree', {
                'type': 'geojson',
                'data': {
                    'type': 'Feature',
                    'properties': {},
                    'geometry': {
                        'type': 'LineString',
                        'coordinates': [
                            [-0.066985, 51.503363],
                            [-3.550610, 40.390555],
                            [-77.140217, 38.801481],
                            [-118.175979, 34.008447]
                        ]
                    }
                }
            });
            map.addLayer({
                'id': 'routeThree2',
                'type': 'line',
                'source': 'routeThree',
                'layout': {
                    'line-join': 'round',
                    'line-cap': 'round'
                },
                'paint': {
                    'line-color': '#04A5BD',
                    'line-width': 8
                }
            });
            map.on('mouseover', 'routeThree2', function (e) {
                popup = new mapboxgl.Popup()
                    .setLngLat(e.lngLat)
                    .setHTML("<h2>This is the third line that will explain something</h2>")
                    .addTo(map);
    
            });
    
            map.on('mouseout', 'routeThree2', function (e) {
                if (popup) popup.remove();
    
            });
    
    
        });
    

    【讨论】:

    • 我希望它处于悬停状态,而不是单击状态,如果我将其从单击更改为 mouseenter,它会在悬停时显示,但弹出窗口永远不会消失
    • 那是因为你的代码没有包含 mouseout... 添加到我的回答中
    • 很高兴能提供帮助,我在 Mapbox 上遇到了很多困难。我编辑并添加了一个完整的小提琴
    猜你喜欢
    • 1970-01-01
    • 2011-06-11
    • 1970-01-01
    • 2021-12-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-12-11
    • 2019-10-14
    相关资源
    最近更新 更多