mapbox js map监听on off 匹配问题

问题缘由请参考如下

mapbox图层的点击事件注册一次之后无法取消的问题

https://blog.csdn.net/weixin_44523653/article/details/103665583

mapbox api中描述

所以listener必须为实名的外部函数,而listener中除了event事件对象,没有可传递参数的位置。如何解决?当map.on和map.off在不同的作用域中时,更加麻烦。

mapbox奇葩的是

on:listener中

_self.popup = new mapboxgl.Popup().setLngLat(_coordinates).setHTML(_showInfo).addTo(_self.map);

off:之后

_self.popup&&_self.popup.remove();

这样一一对应才能够关闭气泡。太狭隘了。。。。。。

整个模块多次进行加载和移除,如果on没有对应的执行off,on里面的listenter函数内容就会被执行多次。

结合以上情况,使用AMD开发时,坑还挺多。解决办法如下

使用临时内部函数处理对象点击,可以调用方法里面的模块局部变量,同时用self提升作用域范围指向外部,供off调用,解决。。。。。。。。。。。。。。。。

!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!

查看popup弹出的内容都在div里面,采用最原始的的办法解决,实现所有popup关闭

$(".mapboxgl-popup").remove();

 

 

Mapbox GL JS 是一个用于在网页上嵌入交互式地图的 JavaScript 库。在 Mapbox 中,如果你之前为地图添加了鼠标移动事件监听器,想要移除这个监听器,可以使用 JavaScript 的 `removeEventListener` 方法。以下是一个基本的示例来说明如何移除地图的鼠标移动事件监听器: 首先,你需要获取 Mapbox 地图的实例,然后添加鼠标移动事件监听器。之后,如果你决定不再需要该监听器,可以通过调用 `removeEventListener` 方法并传入相同的事件类型和监听器函数来移除它。 ```javascript // 假设 map 是你的 Mapbox 地图实例 // 添加鼠标移动事件监听map.on('mousemove', function(e) { // 事件处理逻辑 console.log(e.point); // 例如,打印鼠标所在位置的经纬度 }); // 在某个条件下决定移除鼠标移动事件监听map.off('mousemove', function(e) { // 这里应该是之前添加监听器时使用的同一个函数引用 }); ``` 请注意,在调用 `removeEventListener` 时,你需要提供与 `addEventListener` 相同的函数引用。如果你使用了一个匿名函数作为监听器,那么你将无法直接移除它,因为无法引用到同一个函数实例。为了避免这种情况,你可以使用具名函数或者将匿名函数赋值给一个变量。 ```javascript // 使用具名函数作为事件监听器 function handleMouseMove(e) { console.log(e.point); } // 添加事件监听map.on('mousemove', handleMouseMove); // 移除事件监听map.off('mousemove', handleMouseMove); ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

一醉千秋

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值