【问题标题】:Leafletjs open a popup near a Control buttonLeafletjs 在控制按钮附近打开一个弹出窗口
【发布时间】:2014-12-03 17:25:45
【问题描述】:

我正在使用Leafletjs 构建地图。在那张地图上,我有一个带有大量标记的图层。当用户单击标记时,我会删除全局图层并创建一个新图层,其中仅包含与单击的图层有某种关系的标记。

为了使用户能够返回到先例(完整)层,我生成了一个使用 easy-button plugin 创建的按钮

btnViewAll = L.easyButton(
    'fa-eye', //icon
    function(){
        ea_clearLayer(markersCluster);
        markersCluster.addTo(map);  
    },
    'title',
    ''
);
map.addControl(btnViewAll);

但用户通常看不到它。所以我想在这个按钮附近有一个临时弹出窗口告诉他们一些提示。 Popup 类需要一个 LatLng,但 Control class 没有 getLatLng() 方法。

这里是我想如何创建和关闭弹出窗口。但它不起作用:

var popup = L.popup()
        .setLatLng(btnViewAll.getPosition()) <---- HERE WHAT?
        .setContent("click me to return to all markers")
        .openOn(map);

setInterval(function() {
   popup.closePopup(); 
}, 1000);

//更新-----

花费大量时间后,我无法使用@iH8 方法将弹出窗口放置在固定位置,因为我的 openPopup() 必须在制作动画并移动已计算坐标的 map.fitBounds(latLng) 函数之后生成对于弹出窗口。使其工作的唯一方法是捕获结束 fitBounds() 事件。

我的工作是构建一个类似于经典传单弹出窗口的 div 并使用 .show() 生成它:

//build a popup content
pcontent='<strong>'+
            "Clicca sull'occhio per poter"+
                '<br/>'+
            'tornare a visualizzare'+
                '<br/>'+
            'tutte le aziende sulla mappa'+
        '</strong>';

//build the popup and appending it
$('#'+map_id).append(ea_custom_popup('popup-tips-viewall',pcontent));

//the popup function
function ea_custom_popup(_class,content){
    return '<div class="'+_class+'" >'+
            '<div class="leaflet-popup-content-wrapper">'+
                '<div class="leaflet-popup-content">'+
                    content+
                '</div>'+
            '</div>'+
            '<div class="leaflet-popup-tip-container">'+
                '<div class="leaflet-popup-tip"></div>'+
            '</div>'+
        '</div>';
}

以及显示和隐藏部分:

...
map.fitBounds(pbounds);

var $popup = $('.popup-tips-viewall');
if(! $popup.hasClass('one-time-viewed')){
    $popup.show();
    $popup.addClass('one-time-viewed');
    setInterval(function() {
        $popup.hide();
    }, 4000);
}
...

css:

.popup-tips-viewall {
    left: 38px;
    padding: 10px;
    position: relative;
    top: 133px;
    width: 201px;
    z-index: 1;
    opacity:1;
    pointer-events:none;
    overflow:hidden;
    display:none;
}

希望对你有用。或者有人可以告诉我正常的(leafletjs方式)。

【问题讨论】:

    标签: javascript jquery leaflet


    【解决方案1】:

    这取决于您放置按钮的位置。如果您有该按钮的确切位置,您可以使用 L.Map 的containerPointToLatLng 函数来获取弹出窗口所需的坐标。更多转换方法见参考:http://leafletjs.com/reference.html#map-conversion-methods

    【讨论】:

    • 按钮每次都在同一个位置生成,使用此功能问题会发生变化:地图中某个点的确切位置是什么?在互联网上寻找代码
    • 硬编码,这是最后一个问题的解决方案:mapbox.com/mapbox.js/example/v1.0.0/mouse-position
    猜你喜欢
    • 2012-02-17
    • 1970-01-01
    • 2022-05-23
    • 1970-01-01
    • 2012-12-12
    • 2013-05-12
    • 1970-01-01
    • 1970-01-01
    • 2018-04-05
    相关资源
    最近更新 更多