区分程序化Bing AJAX地图导航与用户平移/缩放和窗口大小

Distinguishing programmatic Bing AJAX Map navigation from user pan/zoom and window resizes

本文关键字:缩放 窗口大小 用户 程序化 Bing AJAX 导航 地图      更新时间:2023-09-26

我有一个场景,在用户与地图交互以更改当前视图之前,我需要不断保持特定的LocationRect最佳拟合(即map.setView({ bounds: myLocationRect })的结果)在地图中跨窗口大小或平板电脑方向变化可见。

关于如何做到这一点,我需要一些指导。考虑到有多少不同的鼠标和键盘交互可以改变视图,我不想过滤所有这些交互;过滤掉包含HTML元素的地图改变大小的场景似乎更合适。

我已经尝试过通过跟踪map元素之前的宽度/高度并监听targetviewchanged事件来实现这一点;然而,这对我来说并不可靠。原因是,如果我重置视图,我就无法可靠地暂停侦听targetviewchanged。例如:

function resetView() {
    if(!_keepAoiInView) return; // unhook setInterval as well; omitted for brevity
    _suspend = true;
    _map.setView({ bounds: theBoundsIWant });
    _suspend = false;
}
function ontargetviewchanged() {
    // This suspend check doesn't work - 
    //  resetView() isn't always lower in the call stack;
    //  therefore, _suspend is set back to false before the
    //  targetviewchanged event fires.
    if(_suspend) return;
    _keepAoiInView = false;  // unhook setInterval as well; omitted for brevity
}

如果您似乎无法让targetviewchanged正常工作,也许值得重新考虑跟踪其他事件。

使用pointer.js,您可以更容易地跟踪所有不同的可能交互。这样,您只需要捕获少数类型的事件,这些事件在后台代表了许多类型的事件。如果它能很好地与Bing地图配合使用,可能会解决鼠标、触摸以及手势事件的问题。

我怀疑,这可能无法解决键盘事件的问题,但也许监控这些事件也是可以管理的。