leafletjs 添加可滚动弹出窗口?

2023-12-23

使用带有弹出窗口的 leafletjs。当我的弹出窗口包含最少的文本时,一切正常。如果我把它们做得更大,它们仍然可以正常工作。如果我添加太多,我会添加

maxHeight

到弹出窗口,它使弹出窗口可滚动。

如果我一开始没有足够的内容来填充页面并使其可滚动,则它不会变得可滚动。没关系,直到我动态添加更多内容到弹出窗口,然后我需要滚动条,但它不会显示。

关于如何让 leafletjs 在弹出窗口渲染后将滚动条添加到弹出窗口的任何想法?

编辑:弹出选项是用循环中的标记初始化的,该循环根据人们想要看到的内容加载不同的数据数组。初始化如下。

    var marker = L.marker(new L.LatLng(a[0], a[1]), { title: title });
        marker.bindPopup('<img width="'+width+'" height="'+height+'"  src="'+a[3]+'"/><br><div id="weather"> <button type="button" onclick="weatherload(\''+a[0]+'\',\''+a[1]+'\')">Click Me for Weather!</button></div>',{'maxWidth':'500','maxHeight':'350','minWidth':'350'});
        CAMlayer.addLayer(marker);

弹出窗口的图像占据了大部分空间。底部有一个带有按钮的 div。单击该按钮时,它会被替换为 loader gif,同时 ajax 函数会获取一些数据,并通过 insidehtml 放入弹出窗口中。

 document.getElementById("weather").innerHTML = xhttp.responseText;

我将 maxheigth 设置为 350px,一旦添加额外数据,它就会增长到 520px,并且没有滚动条。

编辑:删除测试页。


如何初始化弹出选项以及如何向其中添加更多内容?

一旦maxHeight设置选项后,滚动条应在内容太大时立即出现,并在内容足够小时立即消失。

Demo: http://jsfiddle.net/ve2huzxw/92/ http://jsfiddle.net/ve2huzxw/92/


EDIT:

以下是有关如何将内容添加到弹出元素的额外详细信息和代码:

The height当Leaflet检测到内容太大时,动态添加CSS属性(必要时使滚动条出现)。

However,这个检测发生only如果你使用setContent弹出方法。如果您通过外部函数更改内容(例如您的 AJAX 回调),则不会触发它weatherload“手动”更改部分弹出内容的功能innerHTML).

最简单的解决方法就是调用myPopup._updateLayout()添加内容后,弹出窗口上的内部 Leaflet 方法。这将“手动”强制 Leaflet 检查弹出内容的高度,并添加heightCSS 属性(如果需要)。

更新的演示:http://jsfiddle.net/ve2huzxw/93/ http://jsfiddle.net/ve2huzxw/93/

一个“正确”的解决方案是避免通过添加内容innerHTML。相反,你应该使用setContent弹出方法 http://leafletjs.com/reference.html#popup-setcontent更新您的内容(您将复制初始图像并添加新内容)。这也可以避免使用所有弹出窗口的 ID 都相同的 div(这依赖于这样一个事实:地图上任何时候都只会打开 1 个弹出窗口,但如果这一假设不再成立,则会中断) 。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

leafletjs 添加可滚动弹出窗口? 的相关文章