Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/redis/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Leaflet 外部元素聚集标记上的小叶触发事件_Leaflet_Leaflet.markercluster - Fatal编程技术网

Leaflet 外部元素聚集标记上的小叶触发事件

Leaflet 外部元素聚集标记上的小叶触发事件,leaflet,leaflet.markercluster,Leaflet,Leaflet.markercluster,我刚刚开始为我即将到来的项目学习lapper.js 我正在努力实现的目标: 我需要列出地图上显示的标记,当列表项悬停(或鼠标悬停)时,它将显示地图上的位置(对于单个标记,它应该更改其颜色。对于群集标记,它应该显示覆盖线,就像我们将其悬停时它的行为一样。如果可能,还可以更改其颜色)。 地图不应该像缩放级别一样改变,简单地说,我需要在地图上突出显示标记/簇 我现在所完成的:我能够在单个标记上完成。 我非常沮丧的事情:我没能找到一种方法让它发生在集群标记上 我使用全局变量对象来存储任何创建的标记 f

我刚刚开始为我即将到来的项目学习lapper.js

我正在努力实现的目标: 我需要列出地图上显示的标记,当列表项悬停(或鼠标悬停)时,它将显示地图上的位置(对于单个标记,它应该更改其颜色。对于群集标记,它应该显示覆盖线,就像我们将其悬停时它的行为一样。如果可能,还可以更改其颜色)。 地图不应该像缩放级别一样改变,简单地说,我需要在地图上突出显示标记/簇

我现在所完成的:我能够在单个标记上完成。

我非常沮丧的事情:我没能找到一种方法让它发生在集群标记上

我使用全局变量对象来存储任何创建的标记

function updateMapMarkerResult(data) {
  markers.clearLayers();
  for (var i = 0; i < data.length; i++) {
    var a = data[i];
    var myIcon = L.divIcon({
      className: 'prop-div-icon',
      html: a.Description
    });
    var marker = L.marker(new L.LatLng(a.Latitude, a.Longitude), {
      icon: myIcon
    }, {
      title: a.Name
    });
    marker.bindPopup('<div><div class="row"><h5>Name : ' + a.Name + '</h5></div><div class="row">Lat : ' + a.Latitude + '</div><div class="row">Lng : ' + a.Longitude + '</div>' + '</div>');
    marker.on('mouseover', function(e) {
      if (this._icon != null) {
        this._icon.classList.remove("prop-div-icon");
        this._icon.classList.add("prop-div-icon-shadow");
      }
    });
    marker.on('mouseout', function(e) {
      if (this._icon != null) {
        this._icon.classList.remove("prop-div-icon-shadow");
        this._icon.classList.add("prop-div-icon");
      }
    });
    markersRef[a.LocId] = marker;   // <-- Store Reference
    markers.addLayer(marker);

    updateMapListResult(a, i + 1);
  }
  map.addLayer(markers);
}
这是我目前的工作,任何线索都会给我很大的帮助。谢谢


注意:我唯一熟悉的js库是JQuery,我对Angular.js等其他库一无所知您可能正在寻找
标记。getVisibleParent(marker)
方法,在标记聚集的情况下检索包含的集群

不幸的是,仅在该群集上触发事件是不够的。覆盖率显示功能是在群集组上设置的,而不是在其单个群集上设置的。因此,您需要在该群集上触发事件:

函数\u FireEventOnMarker或VisibleParentCluster(标记,事件名称){
var visibleLayer=markers.getVisibleParent(marker);
if(L.MarkerCluster的visibleLayer实例){
//如果标记隐藏在簇中,请使用clusterGroup
//显示规则覆盖多边形。
markers.fire(事件名称{
图层:visibleLayer
});
}否则{
marker.fire(事件名称);
}
}
var marker=markersRef[this.getAttribute('marker')];
_fireEventOnMarkerOrVisibleParentCluster(标记“鼠标悬停”);
更新的JSFIDLE:

话虽如此,我认为这是另一个有趣的UI,而不是显示“手动”时得到的规则覆盖多边形悬停在群集上,将使群集蜘蛛化并突出显示标记。不太容易实现,但结果对我来说很好。下面是一个快速尝试,可能需要更多的工作才能使其防弹:

演示:

函数\u FireEventOnMarker或VisibleParentCluster(标记,事件名称){
if(eventName==='mouseover'){
var visibleLayer=markers.getVisibleParent(marker);
if(L.MarkerCluster的visibleLayer实例){
//我们希望显示当前隐藏在群集中的标记。
//确保它一经曝光就会突出显示。
markers.once('spiderified',function(){
marker.fire(事件名称);
});
//现在将其包含的簇蜘蛛化以显示它。
//这将自动取消对其他群集的命名。
visibleLayer.spiderfy();
}否则{
//该标记已可见,如果存在,则不与其他簇区分
//它们不包含标记。
_未命名的前一簇非父(标记);
marker.fire(事件名称);
}
}否则{
//对于mouseout,标记应该已经取消聚集,除非
//下一次鼠标滑过之前发生过?
marker.fire(事件名称);
}
}
函数_unsideryppreviousclusterifnotparentof(marker){
//检查当前是否存在蜘蛛网络化群集。
//如果是,且不包含标记,则取消标记。
var spiderfiedCluster=标记;
如果(
蜘蛛团
&&!\u集群容器标记器(蜘蛛集群、标记器)
) {
spiderfiedCluster.unsiderfy();
}
}
功能_clusterContainsMarker(群集、标记){
var currentLayer=标记;
while(currentLayer&¤tLayer!==群集){
currentLayer=currentLayer.\uu父级;
}
//比如说我们是否发现了集群或者什么都没有。
返回!!当前层;
}

它是有效的!当然是我要找的。而且蜘蛛侠的功能真是棒极了!我们会考虑使用它,需要考虑更多的标记。但是你真的把它钉牢了,甚至更多。谢谢,你只节省了我头痛一周的时间。
...
li.addEventListener("mouseover", function(e) {
    jQuery(this).addClass("btn-info");
    markersRef[this.getAttribute('marker')].fire('mouseover'); // --> Trigger Marker Event "mouseover"
    // TODO : Trigger ClusteredMarker Event "mouseover"
  });
...