Openlayers中使用Overlay实现点击要素弹窗并且弹窗随之移动


场景

Vue+Openlayer使用overlay实现弹窗弹出显示与关闭:

https://blog.csdn.net/BADAO_LIUMANG_QIZHI/article/details/121268946

实现弹窗的效果可以参考上面。

要实现的效果是点击某个元素弹窗显示,并且弹窗随着元素的移动而移动。

实现元素移动的效果可以参考如下:

Openlayers中使用Image的rotation实现车辆定位导航带转角(判断车辆图片旋转角度):

https://blog.csdn.net/BADAO_LIUMANG_QIZHI/article/details/118635362

结合以上两个的效果

注:

博客:
https://blog.csdn.net/badao_liumang_qizhi
关注公众号
霸道的程序猿
获取编程相关电子书、教程推送与免费下载。

实现

1、实现弹窗的代码基本同上,不同的是添加了一个布尔变量,控制是否显示弹窗

        var isShowDialog = false;
        let _that = this;
        map.on('singleclick', function (evt) {
            let coordinate = evt.coordinate
            // 点击尺 (这里是尺(米),并不是经纬度);
            var feature = map.forEachFeatureAtPixel(evt.pixel, (feature) => {
                return feature;
            });
            if (feature) { //捕捉到要素
                content.innerHTML = `
                    

公众号:

霸道的程序猿

`; _that.overlay.setPosition(coordinate); //把 overlay 显示到指定的 x,y坐标 isShowDialog = true; } else { console.log("没有元素"); } });

布尔变量的默认值为false,在地图的点击事件中,捕获到元素之后,将其设置为true。

2、然后定时器一直监测

            setTimeout(() => {
                if (isShowDialog) {
                    this.overlay.setPosition([Number(item.x), Number(item.y)]);
                }
            }, 0);

当布尔变量为true时,将overlay弹窗显示在当前坐标位置上。

这里的item.x是通过定时器模拟获取的后台坐标数据。

3、在弹窗的关闭事件中再将布尔变量设置为false

        //弹窗关闭事件
        closer.onclick = function () {
            _that.overlay.setPosition(undefined);
            closer.blur();
            isShowDialog = false;
            return false;
        };

4、完整示例代码


"en">


    "UTF-8">
    OpenLayers example
    "stylesheet" href="lib/ol65/ol.css" type="text/css">
    



    
"map">
"popup" class="ol-popup"> "#" id="popup-closer" class="ol-popup-closer">X
"popup-content" class="popup-content">