【问题标题】:No img displayed on the leaflet control传单控件上不显示 img
【发布时间】:2024-01-05 19:28:01
【问题描述】:

我的网络应用程序包含两个要显示的底图。我创建了一个传单控制层来管理它们的可见性:

var baseMaps = {
     "Bing Satellite": bingLayer,
      "OpenCycleMap": tileLayer
};

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

问题是应该在控件内的图标没有显示出来。当我检查时,控制台会在 layers-2px.png 上呈现 404 错误:Failed to load resource: the server responded with a status of 404 (Not Found)。 我正在使用cdn调用传单,所以我不知道这个问题!

这是地图中的渲染:

我们将不胜感激。

我举了一个可行的例子。

<html>
<head>
  <meta charset=utf-8 />
  <title>Leaflet Control.Layers</title>
  <meta name='viewport' content='initial-scale=1,maximum-scale=1,user-scalable=no' />

    <!-- Load Leaflet from CDN -->
    <link rel="stylesheet" href="https://unpkg.com/leaflet@1.3.4/dist/leaflet.css"
    integrity="sha512-puBpdR0798OZvTTbP4A8Ix/l+A4dHDD0DGqYW6RQ+9jxkRFclaxxQb/SJAWZfWAkuyeQUytO7+7N4QKrDh+drA=="
    crossorigin=""/>
    <script src="https://unpkg.com/leaflet@1.3.4/dist/leaflet.js"
    integrity="sha512-nMMmRyTVoLYqjP9hrbed9S+FzjZHW5gY1TWCHA5ckwXZBadntCNs8kEqAWdrb9O7rxbCaA4lKTIWjDXZxflOcA=="
    crossorigin=""></script>


    <!-- Load Esri Leaflet from CDN -->
    <script src="https://unpkg.com/esri-leaflet@2.2.3/dist/esri-leaflet.js"
    integrity="sha512-YZ6b5bXRVwipfqul5krehD9qlbJzc6KOGXYsDjU9HHXW2gK57xmWl2gU6nAegiErAqFXhygKIsWPKbjLPXVb2g=="
    crossorigin=""></script>


  <style>
    body { margin:0; padding:0; }
    #map { position: absolute; top:0; bottom:0; right:0; left:0; }
  </style>
</head>
<body>

<div id="map"></div>

<script>
  var gray = L.layerGroup();

  // more than one service can be grouped together and passed to the control together
  L.esri.basemapLayer("DarkGray").addTo(gray);
  L.esri.basemapLayer("GrayLabels").addTo(gray);

  var states = L.esri.featureLayer({
      url: "https://sampleserver6.arcgisonline.com/arcgis/rest/services/Census/MapServer/3",
      style: function (feature) {
          return {color: '#bada55', weight: 2 };
      }
  });

  var map = L.map('map', {
      center: [39, -97.5],
      zoom: 4,
      layers: [gray, states]
  });

  var baseLayers = {
      "Grayscale": gray,
      "Streetmap": L.esri.basemapLayer("Streets")
  };

  var overlays = {
      "U.S. States": states
  };

  // http://leafletjs.com/reference-1.0.3.html#control-layers
  L.control.layers(baseLayers, overlays).addTo(map);
</script>

</body>
</html>

【问题讨论】:

  • 您能否提供一个可行的示例来重现该问题?
  • 我编辑了我的问题
  • 我看没问题。不显示错误
  • 这会让我发疯。我在本地复制了同样的东西,它工作正常,但是当我直接在我们的远程服务器上工作时,它会在图标上呈现这个 404 错误。
  • 我的问题是,我可以强制将自定义图标放到控件上吗?

标签: leaflet


【解决方案1】:

您可以通过设置自定义图像来修改以下 css 选择器的 background-image 属性:

.leaflet-control-layers-toggle, .leaflet-touch .leaflet-control-layers-toggle {
    background-image: url('http://ovrdc.github.io/parcel-viewer/assets/images/layers-bl.png');
    background-size: 80%;
    margin-top: 0px;
    width: 36px;
    height: 36px;
}

<html>
<head>
  <meta charset=utf-8 />
  <title>Leaflet Control.Layers</title>
  <meta name='viewport' content='initial-scale=1,maximum-scale=1,user-scalable=no' />

    <!-- Load Leaflet from CDN -->
    <link rel="stylesheet" href="https://unpkg.com/leaflet@1.3.4/dist/leaflet.css"
    integrity="sha512-puBpdR0798OZvTTbP4A8Ix/l+A4dHDD0DGqYW6RQ+9jxkRFclaxxQb/SJAWZfWAkuyeQUytO7+7N4QKrDh+drA=="
    crossorigin=""/>
    <script src="https://unpkg.com/leaflet@1.3.4/dist/leaflet.js"
    integrity="sha512-nMMmRyTVoLYqjP9hrbed9S+FzjZHW5gY1TWCHA5ckwXZBadntCNs8kEqAWdrb9O7rxbCaA4lKTIWjDXZxflOcA=="
    crossorigin=""></script>


    <!-- Load Esri Leaflet from CDN -->
    <script src="https://unpkg.com/esri-leaflet@2.2.3/dist/esri-leaflet.js"
    integrity="sha512-YZ6b5bXRVwipfqul5krehD9qlbJzc6KOGXYsDjU9HHXW2gK57xmWl2gU6nAegiErAqFXhygKIsWPKbjLPXVb2g=="
    crossorigin=""></script>


  <style>
    body { margin:0; padding:0; }
    #map { position: absolute; top:0; bottom:0; right:0; left:0; }
    .leaflet-control-layers-toggle, .leaflet-touch .leaflet-control-layers-toggle {
      background-image: url('http://ovrdc.github.io/parcel-viewer/assets/images/layers-bl.png');
      background-size: 80%;
    margin-top: 0px;
    width: 36px;
    height: 36px;
    }
  </style>
</head>
<body>

<div id="map"></div>

<script>
  var gray = L.layerGroup();

  // more than one service can be grouped together and passed to the control together
  L.esri.basemapLayer("DarkGray").addTo(gray);
  L.esri.basemapLayer("GrayLabels").addTo(gray);

  var states = L.esri.featureLayer({
      url: "https://sampleserver6.arcgisonline.com/arcgis/rest/services/Census/MapServer/3",
      style: function (feature) {
          return {color: '#bada55', weight: 2 };
      }
  });

  var map = L.map('map', {
      center: [39, -97.5],
      zoom: 4,
      layers: [gray, states]
  });

  var baseLayers = {
      "Grayscale": gray,
      "Streetmap": L.esri.basemapLayer("Streets")
  };

  var overlays = {
      "U.S. States": states
  };

  // http://leafletjs.com/reference-1.0.3.html#control-layers 
  L.control.layers(baseLayers, overlays).addTo(map);
</script>

</body>
</html>

【讨论】: