首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >将弹出窗口移出屏幕会意外关闭弹出窗口(带有leaflet.markercluster的宣传单)

将弹出窗口移出屏幕会意外关闭弹出窗口(带有leaflet.markercluster的宣传单)
EN

Stack Overflow用户
提问于 2021-03-15 19:44:06
回答 1查看 244关注 0票数 2

我不明白为什么,但每次我打开一个弹出式窗口,当弹出式窗口比屏幕大,或者我把它的锚点从屏幕上移走时,弹出窗口就会关闭。我现在测试了它,当leaflet.markercluster在运行的时候就会发生这种情况。运行以下代码片段,了解我的意思

使用leaflet.markercluster

弹出窗口在打开时关闭

代码语言:javascript
复制
var map = L.map('map').setView([38, -8], 7)

L.tileLayer('https://{s}.tile.openstreetmap.org/{z}/{x}/{y}.png').addTo(map);

var markers = L.markerClusterGroup()

for (let i=0; i<100; i++) {

  let veryLongHtml = "popup " + i + "<br>"
  for (let j=0; j<1000; j++) {
    veryLongHtml+='a '
  }

  const popup = L.popup({
    closeOnClick: false,
    autoClose: false
  }).setContent(veryLongHtml);
  
  const marker = L.marker([
    getRandom(37, 39), 
    getRandom(-9.5, -6.5)
  ]).bindPopup(popup);
  
  markers.addLayer(marker)
}
map.addLayer(markers);

function getRandom(min, max) {
  return Math.random() * (max - min) + min;
}
代码语言:javascript
复制
#map {height: 200px}
代码语言:javascript
复制
<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/leaflet/1.7.1/leaflet.css" />
<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/leaflet.markercluster/1.4.1/MarkerCluster.css" />
<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/leaflet.markercluster/1.5.0/MarkerCluster.Default.min.css" />

<script src="https://cdnjs.cloudflare.com/ajax/libs/leaflet/1.7.1/leaflet.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/leaflet.markercluster/1.4.1/leaflet.markercluster.js"></script>

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

不使用leaflet.markercluster

在这里,它工作正常,检查:

代码语言:javascript
复制
var map = L.map('map').setView([38, -8], 7)

L.tileLayer('https://{s}.tile.openstreetmap.org/{z}/{x}/{y}.png').addTo(map);

for (let i=0; i<10; i++) {

  let veryLongHtml = "popup " + i + "<br>"
  for (let j=0; j<1000; j++) {
    veryLongHtml+='a '
  }

  const popup = L.popup({
    closeOnClick: false,
    autoClose: false
  }).setContent(veryLongHtml);
  
  const marker = L.marker([
    getRandom(37, 39), 
    getRandom(-9.5, -6.5)
  ]).addTo(map).bindPopup(popup);
  
}

function getRandom(min, max) {
  return Math.random() * (max - min) + min;
}
代码语言:javascript
复制
#map {height: 200px}
代码语言:javascript
复制
<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/leaflet/1.7.1/leaflet.css" />
<script src="https://cdnjs.cloudflare.com/ajax/libs/leaflet/1.7.1/leaflet.js"></script>
<div id="map"></div>

代码语言:javascript
复制
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-03-15 22:02:19

我怀疑这是由于removeOutsideVisibleBounds option (默认情况下启用)删除了远离视口的所有标记和簇,以提高性能。

您可以简单地尝试禁用此选项:

代码语言:javascript
复制
var markers = L.markerClusterGroup({
  removeOutsideVisibleBounds: false
})

也许通过防止删除仍处于打开状态(且该选项已启用)的标记来改进Leaflet.markercluster库可能会很有趣,这将在库存储库中讨论……

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/66637350

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档