如何检测 Mapbox/Leaflet 何时进入或退出全屏模式

How to detect when Mapbox/Leaflet enters or exits fullscreen mode

如何检测 Mapbox 或 Leaflet 何时进入或退出全屏模式?

我发现 this answer 有人这样说:

Documentation says:

map.on('fullscreenchange', function () {
    if (map.isFullscreen()) {
        console.log('entered fullscreen');
    } else {
        console.log('exited fullscreen');
    }
});

If doesnt work, use this instead:

map.on('enterFullscreen', function(){
});

map.on('exitFullscreen', function(){
});

我试过了,还有一些事件类型参数的变体。没有骰子。

另外,the documentation 没有提到这个事件。

请注意,我使用的是 Mapbox GL JS。

这个其实很简单。您不需要来自 Leaflet 或 Mapbox 的任何东西。只需在文档对象上使用事件侦听器。

let fullScreenChange;  

if ('onfullscreenchange' in window.document) {
  fullScreenChange = 'fullscreenchange';
} else if ('onmozfullscreenchange' in window.document) {
  fullScreenChange = 'mozfullscreenchange';
} else if ('onwebkitfullscreenchange' in window.document) {
  fullScreenChange = 'webkitfullscreenchange';
} else if ('onmsfullscreenchange' in window.document) {
  fullScreenChange = 'MSFullscreenChange';
}

function onFullscreenChange() {
   // Your stuff.
}

window.document.addEventListener(fullScreenChange, onFullscreenChange);

我知道这是一个迟到的回应,但对于未来的任何人来说,这就是我处理它的方式(对于 mapbox GL JS(没有传单)。

map.on("resize", () => {
    if (document.fullscreenElement) // do something
});

您可以给地图包装器 div 一个名称,并专门检查地图是否是触发全屏事件的原因

map.on("resize", () => {
    if (document.fullscreenElement?.attributes.name.value === "mapWrapper") // do something
});

如果您使用的是 React,则可以使用状态来保存此信息。

const [isFullScreen, setIsFullScreen] = useState();
...
map.on("resize", () => {
  setIsFullScreen(
    document.fullscreenElement?.attributes.name.value === "mapWrapper"
  );
});
...
if (isFullScreen) //do something