宣传单自定义控制位置:中心

Dr.*_*YSG 4 leaflet

我们正在连接一个眼动仪来控制传单地图(平移,缩放等)我们想要一个出现在地图中心的自定义控件(用于菜单功能)目前Leaflet不支持位置:'center ')(支持topleft等)的想法?

aor*_*vre 6

在传单上的地图上添加自定义控件就是这样执行的.

例如,徽标:

var logo= L.control({
    position : 'topleft'
});
logo.onAdd = function(map) {
    this._div = L.DomUtil.create('div', 'myControl');
    var img_log = "<div class="myClass"><img src=\"images/logo.png\"></img></div>";

    this._div.innerHTML = img_log;
    return this._div;

}
logo.addTo(map);
Run Code Online (Sandbox Code Playgroud)

然后,您可以将CSS样式添加到myClass以使其居中:( 此部分尚未经过我自己的测试)

.myClass {
   padding-top:50%;
   padding-left: 50%;
}
Run Code Online (Sandbox Code Playgroud)

  • 这个答案不起作用.该控件是div的子元素,其中左侧是传单顶部传单.这个div没有地图的宽度...所以padding-left 50%只是将控件置于其父div中心,但不会将控件置于地图中心 (3认同)

Wil*_*ley 6

您可以简单地将 .leaflet-left 类覆盖为此,您的控件将水平居中。

.leaflet-left {
    left: 50%;
    transform: translate(-50%, 0%);
}
Run Code Online (Sandbox Code Playgroud)

并且要垂直居中,只需将 .leaflet-top 类覆盖为:

.leaflet-top {
    top: 50%;
    transform: translate(0%, -50%);
}
Run Code Online (Sandbox Code Playgroud)

注意:这些更改将影响地图上的其他控件,例如缩放控件。

编辑:

如果您想将功能添加到传单以便其他控件不受影响,您可以执行以下操作:

Leaflet.js:我相信从第 4900 行开始?

t("top", "left"),
t("top", "right"),
t("bottom", "left"),
t("bottom", "right"),
Run Code Online (Sandbox Code Playgroud)

添加这两行:

t("top", "center"),
t("bottom", "center")
Run Code Online (Sandbox Code Playgroud)

这将允许使用位置“topcenter”和“bottomcenter”

然后只需为“传单中心”添加 css 类:

.leaflet-center {
    left: 50%;
    transform: translate(-50%, 0%);
}
Run Code Online (Sandbox Code Playgroud)


Elm*_*tou 6

我知道这是一个老话题,但无论如何,这是我的解决方法。

添加一些 css :

.leaflet-center {
    left: 50%;
    transform: translate(-50%, 0%);
}

.leaflet-middle {
    top: 50%;
    position: absolute;
    z-index: 1000;
    pointer-events: none;
  transform: translate(0%, -50%);

}

.leaflet-center.leaflet-middle {
  transform: translate(-50%, -50%);
}
Run Code Online (Sandbox Code Playgroud)

并修补位置方法。

L.Map.include({
  _initControlPos: function () {
    var corners = this._controlCorners = {},
      l = 'leaflet-',
      container = this._controlContainer =
        L.DomUtil.create('div', l + 'control-container', this._container);

    function createCorner(vSide, hSide) {
      var className = l + vSide + ' ' + l + hSide;

      corners[vSide + hSide] = L.DomUtil.create('div', className, container);
    }

    createCorner('top', 'left');
    createCorner('top', 'right');
    createCorner('bottom', 'left');
    createCorner('bottom', 'right');

    createCorner('top', 'center');
    createCorner('middle', 'center');
    createCorner('middle', 'left');
    createCorner('middle', 'right');
    createCorner('bottom', 'center');
  }
});

Now you have 5 new positions to use.
Run Code Online (Sandbox Code Playgroud)

  • 看起来像是 /sf/answers/2353472411/ 的修改 (2认同)