当前位置: 首页 > 知识库问答 >
问题:

mapbox geojson属性在悬停时不可用

颛孙庆
2023-03-14

我正在使用mapbox并将多个geojson层加载到地图上,如下所示:

...

var aLayer = L.mapbox.featureLayer('/a.geojson');
var bLayer = L.mapbox.featureLayer('/b.geojson');
var cLayer = L.mapbox.featureLayer('/c.geojson');

var layers = {
    LayerA: aLayer,
    LayerB: bLayer,
    LayerC: cLayer
}

...

layers.LayerA.addTo(map).on('ready', function(e) {
  map.fitBounds(LayerA.getBounds(), {animate: true});
});

L.control.layers(layers).addTo(map);

每个Geojson特性包含许多属性;例如,标题和描述在工具提示中正确显示。

我遇到的问题是通过其他交互访问这些属性。我正在调整悬停时每个多边形的样式,如下所示:

LayerA.on('mouseover', function(e)
{
    e.layer.setStyle({
        weight: 2,
        fillOpacity: 0.7
    });

    if (!L.Browser.ie && !L.Browser.opera) {
        e.layer.bringToFront();
    }
});

LayerA.on('mouseout', function(e)
{
    e.layer.setStyle({
        weight: 0.5,
        fillOpacity: 0.5
    });
});

通过e.layere.target访问交互中属性的任何尝试都将失败。我假设工具提示工作意味着它们可用,但无法计算出我哪里出错了。。。?

共有1个答案

陶和歌
2023-03-14

您所做的是处理特性层的事件,而不是特性层中包含的单个层的事件。FeatureLayer是一组图层,用于初始化时传递给它的集合中的每个功能的图层。以这个集合为例,在一个特性中呈现三个标记Layer:

var featureCollection = {
    "type": "FeatureCollection",
    "features": [{
        "type": "Feature",
        "properties": {
            "id": 1
        },
        "geometry": {
            "type": "Point",
            "coordinates": [0, 0]
        }
    },{
        "type": "Feature",
        "properties": {
            "id": 2
        },
        "geometry": {
            "type": "Point",
            "coordinates": [30, 30]
        }
      },{
        "type": "Feature",
        "properties": {
            "id": 3
        },
        "geometry": {
            "type": "Point",
            "coordinates": [-30, -30]
        }
    }]
};

var featureLayer = L.mapbox.featureLayer(featureCollection).addTo(map);

现在,如果将处理程序挂接到单击featureLayer事件:

featureLayer.on('click', function (e) {
    console.log('Clicked featureLayer');
});

不管我点击哪个标记,它都会开火。它甚至不知道我点击了哪个标记,在那里e.target将保存特性层的实例,而不是包含在其中的单个层。现在,如果我将clickhandler挂接到特性组中的独立层的单击事件上:

featureLayer.eachLayer(function (layer) {
    layer.on('click', function (e) {
        console.log('Clicked feature ID: ' + e.target.feature.properties.id);
    });
});

现在,在单击处理程序e.target中,保存单击标记的实例,该标记的特性对象可供您使用。

这里有一个关于Plunker的工作示例:http://plnkr.co/edit/qwgDtQMRuR4XTcrnC1vf?p=preview

 类似资料:
  • 我有一个类似菜单的结构,在一个菜单项上悬停会在一段延迟后打开一个子菜单。我在使用Selenium的确定性方法(=不使用Thread.Sleep)对该菜单进行web测试时遇到问题。 要悬停在元素上,我需要使用Selenium的生成器类() 如何将这两种方法结合起来?我还没有找到一种方法来添加WebDriverWait。直到调用Actions对象。解决我的问题的推荐方法是什么? 我在SOF上发现了各种

  • 如何使悬停属性在点击/激活时停留? 加载项:当其他子菜单打开时关闭子菜单。当我想打开其他子菜单时,我想关闭该子菜单。怎么做? 单击我 JS CSS

  • 我在IE上的css悬停有问题。 简化;我基本上有一个容器div,它将在悬停时显示一个小的div,里面有一些标记中选择一个,:hover由于某种原因将不再工作,div将消失。 在chrome/firefox等中尝试此示例以查看所需的结果&然后在IE11中再试一次以查看问题所在。 null null

  • 我想给文本添加颜色。我有更多的短信。因此,我从服务器检索文本颜色,并将文本颜色添加到相应的文本中。我想为文本添加边框,需要在悬停文本时为边框指定相应的文本颜色。 在样式表中,我们可以给出如下悬停:

  • 按钮的“class”在悬停时发生变化,所以我使用ActionChains移动到元素并单击它(我还使用sleep为浏览器加载页面提供了足够的时间)。Python没有抛出任何异常,但单击不起作用(即日历没有向后移动)。 下面我提供了提到的网站和我用一个例子写的代码。你知道为什么会发生这种情况和/或我该如何克服这个问题吗?非常非常感谢。 网址=https://burocomercial.profeco.

  • 这是我的代码: null null 目前,动画似乎暂停悬停,但如果你取消悬停,你可以看到总是突然显示下一个div。所以它并不是真正的“暂停”,它只是停止然后显示下一个div。持续时间丢失。 怎么可能修复呢? 会非常感谢你的帮助!