【问题标题】:HTML elements slightly off centreHTML 元素稍微偏离中心
【发布时间】:2014-12-01 12:34:13
【问题描述】:

我正在使用带有自定义 div 元素的 Leaflet Marker Cluster 插件来表示一个集群图标。当地图上的一组标记被聚类时,会出现一个聚类图标来代替它们。将鼠标悬停在集群图标上会在地图上显示一个多边形形状,指示集群图标所覆盖的区域。我希望图标位于多边形的中间。但是,它们似乎都略微位于中心的右下角。这是一张图片来说明我的意思。黑线形状表示多边形,红线表示多边形中间,蓝色圆圈表示集群图标。

Pic below :

在我的应用程序中,它们的蓝色圆圈都略微位于中心的右下角。我的集群图标的 CSS 是:

.marker-cluster-div {
    width: 40px;
    height: 40px;
    font-size: 12px;
    border-radius: 50%;
    color: black;
    font-weight: bold;
    text-align: center;
    vertical-align: middle;
    line-height: 40px;
}

是否有任何简单的方法可以将元素从其最初定位的位置向左和向上强制?

【问题讨论】:

  • 你能给出完整的标记吗? marker-cluster-div 从这里看起来不错!
  • 这看起来像是定位问题。给定代码中没有任何内容表明“图标”与底层多边形的定位关系。
  • 问题似乎出在标记集群插件的源代码上,但是,该代码似乎太复杂了,以至于我犹豫要不要乱搞,而是解决症状。

标签: html css leaflet


【解决方案1】:

确保 .marker-cluster-div 的父元素具有相对位置并应用此 css:

.marker-cluster-div {
    position: absolute;
    width: 40px;
    height: 40px;
    top: 50%;
    margin-top: -20px;
    left: 50%;
    margin-left: -20px;
    font-size: 12px;
    border-radius: 50%;
    color: black;
    font-weight: bold;
    text-align: center;
    vertical-align: middle;
    line-height: 40px;
}

【讨论】:

  • 没什么!如果能解决您的问题,请采纳!
  • 您也可以使用 Leaflet 和 Clustermarker 提供的功能,而不是将其破解到位。请看下面我的回答。这样,您只需将 CSS 用于演示目的。
【解决方案2】:

在 Clustermarker 插件中使用自定义标记的正确方法是使用 iconCreateFunction,它可以在初始化 Clustermarker 时传入选项:

iconCreateFunction: function (cluster) {
    var markers = cluster.getAllChildMarkers();
    var n = 0;
    for (var i = 0; i < markers.length; i++) {
        n += markers[i].number;
    }
    return L.divIcon({ html: n, className: 'mycluster', iconSize: L.point(40, 40) });
}

这样,插件将为您提供繁重的工作,并且您可以根据该集群中存在的 childMarker 的数量来做一些花哨的事情。请参阅 documentationworking example

【讨论】:

  • 这对我最初的问题没有帮助,但它确实帮助我进一步分离了 HTML 和 JavaScript。感谢您的帮助!
  • 那我猜你做错了什么。 L.DivIcon 从 L.Icon 扩展而来,如果您在选项中正确分配 iconSize 将为您计算锚点:source