地图框缩放开始和缩放结束时触发的事件不一致



我正在研究mapbox js-gl,版本1.7.0。我已经将页面上十字准线div 的显示和隐藏与缩放开始和缩放事件联系起来。

map.on('zoomstart', function (e)
{
$("#crosshairs-container").show();
console.log("Zooming started...");
});
map.on('zoomend', function (e)
{
$("#crosshairs-container").hide();
console.log("Zooming finished...");
var zoomLevel = map.getZoom();
renderMap();
});

问题是:引用的div 没有可靠且一致地出现和消失。

在桌面(Linux/Chrome(上:鼠标滚轮的单个"增量跳跃"(大多数鼠标都有它们,如果不是现在的全部(有时被注册为zoomend事件,有时不注册。 这意味着,有时缩放会在鼠标滚轮的一次"摆动"后完成 - 即使我仍然通过继续转动鼠标滚轮进行缩放。其他时候,当我继续转动鼠标滚轮时,缩放会继续 - 这是我所期望的行为。

移动设备(Android/Chrome(上:类似的行为,不过,在这里,十字准线叠加在放大(放大或缩小(时几乎完全消失。

我观察到,当在地图的同一部分(已经加载并添加了图层(上多次放大和缩小(尝试重现和观察这种行为(时,桌面似乎"找到了它的凹槽",可以这么说。

我的问题是:由于我不太可能使用错误的事件 - 我不认为这是一个编码问题 - 其他人见过这种行为吗?这是一个硬件问题,从某种意义上说,移动设备上的捏合缩放会"间歇性地"做事,就像"增量摆动"鼠标滚轮一样?那么,对于用户来说,什么看起来和感觉是连续的,实际上是在幕后,许多独立触发的事件"缝合在一起"?

顺便说一下,拖动事件在桌面和移动设备上完美运行。

我通过从dragstartdragend事件切换到movestartmoveend事件来解决此问题。这似乎避免了所有问题,包括必须对事件处理程序进行反反弹或限制。 感谢@Steve贝内特的提示。

最新更新