mapbox - mapbox styledata 事件触发 3 次,我只需要触发 1 次,如何?
问题描述
mapbox styledata 事件触发 3 次,我只需要触发 1 次,如何?
map.on("styledata", loadTiles); // will fire multiple 3 times, whenever style changed.
// event.stopPropagation(); does not work.
map.on("load", loadTiles); // only fire 1 time. but when you change base map, use below
map.setStyle('mapbox://styles/mapbox/' + layerId, {diff: false});
// on load event will not fire, which I need it fire to re-load geojson layer.
map.on("styledata" // works fine, but it fire 3 same event at same time, cause load 3 times geojson layer, cause other error when you load 3 times geojson layer at same time.
// How to make styledata on fire 1 times instead of 3?
解决方案
发现以下事件组合仅可用于触发 1 而不是 3 styledata 事件:
map.on('styledataloading', function() {
console.log('A styledataloading event occurred.');
map.once('styledata', function() {
console.log('A styledata event occurred.');
loadTiles();
});
});
解释:
第一个事件(styledataloading)在地图样式开始改变时触发。
styledataloading:当地图的样式开始异步加载或更改时触发。所有 styledataloading 事件都跟随着 styledata 或错误事件。
作为回调,您可以使用 map.once(...) 设置仅针对第一个 styldata 事件触发的事件侦听器。
一次:将只调用一次的侦听器添加到指定的事件类型。注册侦听器后第一次触发事件时将调用侦听器。
这样,您就不会在第一次更改后丢失样式更改的事件侦听器,就像您只使用map.once('styledata', loadTiles);
.
推荐阅读
- javascript - JS style.cssText 仅适用于 setTimeout 函数
- php - 如何在 .html() jQuery 中实现 PHP Parser 以实现实时预览输入文本
- docker - docker-compose 无法连接到 Docker 守护程序和 sudo docker-compose up --build 失败并显示 standard_init_linux.go:211
- google-cloud-firestore - 使用来自一个集合的字段的内容作为将在哪个集合中获取数据的决定因素
- android - Kotlin 选择了未在 Dialog Fragment 中显示的图像
- react-native - 如何更改树莓派蓝牙名称
- python - 提取价格 - 美丽的汤
- javascript - 调用后端后,动作函数总是在 React 中返回相同的减速器类型
- kubernetes - Kubernetes rbac pod/exec create 操作被禁止
- javascript - 如何在普通的前端 javascript 文件中使用 node.js 函数