javascript 是否有MapKit JS事件来检测Map何时完成加载?

8ehkhllq  于 2023-03-21  发布在  Java
关注(0)|答案(1)|浏览(121)

是否有MapKit JS事件来检测Map何时完成加载?
文档没有显示任何关于如何实现这一点的内容。有人有不涉及setTimeout的解决方法吗?https://developer.apple.com/documentation/mapkitjs
我需要这样做是为了在map完成加载后在map上触发一个Annotation。我已经能够用setTimout方法实现这一点,但是,有时map在action触发之前没有完成加载。

hof1towb

hof1towb1#

因此,在我得到一个书面的答案之前,我将与你分享我的解决方案。我需要加载一个带有图像注解的Map,在Map和引脚加载之后,我希望注解(弹出)出现。这就是我如何实现的。
你会注意到,当你的苹果Map加载并将一个图像注解添加到Map中时,它会为图像注解的大小生成一个特定的样式。所以我等待该内联样式出现在页面上,然后再启动我的函数来显示注解。

function handleImageAnnotationLoaded() {
    console.log('Image annotation has been loaded');
    map.selectedAnnotation = landmarkToShowCallout;
}

// Define the MutationObserver callback function
function observerCallback(mutationsList, observer) {
    for (const mutation of mutationsList) {
        if (mutation.type === 'childList' && mutation.addedNodes.length > 0) {
            for (const node of mutation.addedNodes) {
                if (
                    node.nodeType === Node.ELEMENT_NODE &&
                    node.tagName === 'DIV' &&
                    node.style.width === '49.5px' &&
                    node.style.height === '61.5px'
                ) {
                    handleImageAnnotationLoaded();
                    observer.disconnect(); // Disconnect the observer when the annotation is found
                    break;
                }
            }
        }
    }
}

// Create a MutationObserver instance and configure it with the callback function
const observer = new MutationObserver(observerCallback);

// Start observing the map element for changes
observer.observe(document.getElementById('map'), {
    childList: true,
    subtree: true,
});

不是最优雅的解决方案,但我敢有人张贴另一个工作的例子,为他们工作:)

相关问题