解决百度地图的父元素出现滚轮之后启用鼠标缩放模式之后出现偏移的现象

最近在做项目的时候,有个功能是点击详情按钮的时候在一个弹框里展现出来列表的详情

因为详情弹框里面的数据有其他的表格数据,然后在弹框的下边使用百度地图展示后端发送过来的坐标点,然后把坐标点转换之后使用百度地图的方法制作覆盖物上去。这里边就出现了一个问题是:

百度地图的父元素如果高度超过的了body并且出现了滚动条的情况,使用百度地图的鼠标滚轮缩放功能是会发生偏移的,这个我在网上看了很多文章发现大多说的都是解决的话要么更换地图。

要么把百度地图放在body的可是区域内,也就是说我可以把百度地图放在弹框的上边,注意刚开始时,我说的是把百度地图放在了弹框的下边并且上边有其他的展示信息,经过我一下午的倒腾终于发现他的这种偏移量是可以解决的:

可以看到此时我们的地图处于弹框的下半部分,在百度地图的父元素出现滚动条之后你向下滚动滚动条之后 ,此时鼠标在放在百度地图上就会发现鼠标缩放不会在鼠标的中心点,是会发生向上的偏移解决办法就是我们要首先去监听这个滑轮滚动的事件

  mounted() {//首先这里我在mounted函数里监听了滚轮滑动
        window.addEventListener("scroll", this.handleScroll, true);
    },
  methods: {
        handleScroll() {
            let top = Math.floor(document.body.scrollTop || document.documentElement.scrollTop);
            console.log(top);//这里获取到滚轮body的高度位置
        }
    }

这里要写监听你百度地图的父元素的滚动条高度位置,而不是body,要书写的话我们用其他的获取dom的方式比如:

  let classBox = document.getElementsByClassName('*****')

  let box = classBox[0]

 let idDiv = document.getElementById('****')

用类名或者id获取dom的方式来获取你出现滚动条的父元素的滚动条位置高度

 handleScroll() {
        let ant = document.getElementsByClassName('ant-modal-wrap')
        let box = ant[0]
        let tope = Math.floor(box.scrollTop);

        //为了修正百度地图的父元素出现滚轮之后地图出现的偏差
        let mapDiv = document.getElementById('container')
        mapDiv.style.transform = 'translateY(' + tope + 'px' + ')';
        mapDiv.style.position = 'absolute';
        mapDiv.style.top = '-' + tope + 'px';

    },

这里我使用的class来获取dom元素之后用的scrollTop 这样就监听到了滚轮条的位置,之后在获取到百度地图的dom在使用定位移动的方法就可以恢复了

这样的原因是因为百度地图的缩放是基于body层的,如果body层有滚动条,并且不在最顶端,在当前位置插入了百度地图,也就是出现该问题时的状态,这个时候滚轮缩放就会产生偏移。

所以结果是这样的:

<template>
<a-modal>//modal弹框 要确定map的父元素相对定位
    <div style="position: relative;height: 300px;width: 100%;">
       <div id="container" class="map_scale" style="width: 100%;height: 100%;"></div>
    </div>
</a-modal>
</template>


<script>
mounted() {
        window.addEventListener("scroll", this.handleScroll, true)
    },
    methods: {
        handleScroll() {
            let ant = document.getElementsByClassName('ant-modal-wrap')
            let box = ant[0]
            let tope = Math.floor(box.scrollTop);

            let mapDiv = document.getElementById('container')
            mapDiv.style.transform = 'translateY(' + tope + 'px' + ')';
            mapDiv.style.position = 'absolute';
            mapDiv.style.top = '-' + tope + 'px';
        },
    }
</script>

写的不对的话请大家指出来,因为我也不知道其他的好的解决办法如果有的话在学习学习

  • 3
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值