当页面加载传单时触发多次moveend事件
moveend event fired many times when page is load with Leaflet
当地图被显示或缩放时,我需要做一些操作,所以我给事件moveend附加了一个回调。
map.on('moveend', function() {
// code stuff
});
它工作得很好,但是当页面加载事件被触发三次,我不知道为什么。可能是因为在创建过程中,映射被移动了。
为了避免这种情况,我尝试在订阅moveend事件之前等待load事件,但没有改变。所以我试图将它附加在whenReady回调中,但是它再次被触发了三次。
map.whenReady(function() {
map.on('moveend', function() {
// code stuff
});
});
最后,我发现在resize事件之后,它工作得很好:moveend只触发一次。但我真的相信有一个最好的方法来解决这个问题。
另一个解决方案是将我的回调函数附加到zoomend和dragend两个事件上,以覆盖平移和缩放情况。但是我没有找到一个方法去做。
谢谢你的帮助。
我发现最好的解决方案是将回调附加到两个事件:
map.on('zoomend', function() {
// callback
});
map.on('dragend', function() {
// callback
});
虽然这样代码有点重复,但这是目前最好的解决方案。
对于其他人来说,研究invalidateSize
函数上的options.debounceMoveend
选项。在文档中简要地提到了它,但不幸的是,它看起来只适用于该函数,而不是一般的moveend
事件。
[…如果options.debounceMoveend是true,它将延迟moveend事件,这样即使连续多次调用该方法也不会经常发生。
引用源代码中的行(L3541)
可以使用mouseenter
和mouseleave
事件。例子:
block.addEventListener('mouseenter', ()=>{
//some code when hover
})
block.addEventListener('mouseleave', ()=>{
// some code when leaving block
})
链接到developer.mozilla.org
'zoomend'和'dragend'选项不适合我。我找了很多合适的选择,意识到"搬家"。事件触发几次,因为每次移动地图时都会创建此事件。因此,有必要停止此事件。我用这种方法摆脱了困境。在map初始化之后,我立即写入:
map.off('moveend');
对我来说很有效。现在它运行良好。如果这对别人有用,我会很高兴的。
相关文章:
- 分派点击事件并保留击键修饰符
- 模糊事件的Javascript测试
- keyup事件处理程序更改焦点不适用于快速键入
- 使用 jQuery 的 .on 函数如何获取事件的原始元素
- 如何使Javascript动态html表及其上的事件
- 使用类从一个标记中双击事件
- 如何在未直接触发的情况下停止事件
- 如何在elfinder插件(一个文件管理器插件)上获得上传前事件
- 对iPad上的点击事件反应缓慢
- 事件和状态
- Fancybox是否将Click事件静音
- 主干-不管怎样,检查事件以前是否绑定过
- 从控制器返回后Ajax启动事件激发
- 如何从画布上的某个移动事件中获取X和Y
- Jquery:未触发select事件
- JsFiddle上的鼠标事件不起作用
- 只覆盖箭头键滚动事件
- $window.ga在AngularJS事件中未定义
- cron作业与Javascript计时事件
- 当页面加载传单时触发多次moveend事件