美文网首页前端启示录让前端飞零基础转行前端
Vue3-百度地图所在页面滚动后点击位置错位问题解决

Vue3-百度地图所在页面滚动后点击位置错位问题解决

作者: 前端辉羽 | 来源:发表于2022-01-14 10:55 被阅读0次

需求:
点击按钮唤起地图,页面没滚动的时候,在地图上点击的位置就是鼠标的实际点击位置,但是如果页面发生滚动后,点击就会发生偏移,如图所示:


示意图.png

原因是因为当页面滚动后,百度地图也会跟着发生滚动,虽然地图弹窗是被fix在页面底部的,但地图内部机制还是会跟着页面滚动产生偏移。

解决思路
当点击页面按钮唤起百度地图时,记录下当前页面的向上滚动距离,然后页面的向上滚动距离改为0。
当百度地图弹窗隐藏时,再将页面滚动位置归到原位。

1.获取页面向上滚动的距离
在vue中获取页面的向上的滚动距离,注意如果页面的scroll-behavior设置为了smooth,则使用document.documentElement.scrollTop这个方法就无法正常获取到值,始终是0

//scroll-behavior属性
scroll-behavior:auto; // 滚动条立即滚动
scroll-behavior:smooth; // 窗口平稳滚动

scroll-behavior:smooth情况下最后经常尝试,使用window.pageYOffset可以获得页面向上滚动的距离
如果没有设置过scroll-behavior,使用document.documentElement.scrollTop也可以获取到页面向上的滚动距离

但是window.pageYOffset这个是只读属性,如果要手动修改页面的滚动位置,则还是需要使用document.documentElement.scrollTop

document.documentElement.scrollTop = 300

定义页面向上滚动距离变量originPositonTop,并监听控制百度地图展示与隐藏的变量baiduPointPicker

let originPositonTop = 0
watch(baiduPointPicker, (newValue, oldValue) => {
  console.log('baiduPointPicker发生了改变')
  // 打开了百度地图
  if (newValue) {
    // 存储点击时的页面滚动位置
    originPositonTop = window.pageYOffset
    // 让页面滚动到最顶部
    document.documentElement.scrollTop = 0
  } else {
    // 页面归位
    document.documentElement.scrollTop = originPositonTop
    // 重置top值
    originPositonTop = 0
  }
})

如果在项目中百度地图弹窗是使用的van-popup,则百度地图的渲染元素应该用v-if去控制渲染

<van-popup v-model:show="baiduPointPicker" position="bottom">
  ...some code
  <div id="map-container" v-if="baiduPointPicker"></div>
</van-popup>

相关文章

  • Vue3-百度地图所在页面滚动后点击位置错位问题解决

    需求:点击按钮唤起地图,页面没滚动的时候,在地图上点击的位置就是鼠标的实际点击位置,但是如果页面发生滚动后,点击就...

  • Vite + Vue3 + OpenLayers 手动激活地图

    一、需求说明 开发中遇到一种需求: 需要展示地图,但默认不影响页面滚动。 点击地图后,在地图上方滚动鼠标滚轮可以缩...

  • 鼠标滚动事件

    把百度地图引动到当前页面时,会出现这种情况:鼠标在地图上滚动时,页面也会滚动。怎么让地图动、页面不动呢?代理基于j...

  • jQuery点击锚点平滑滚动

    点击锚点平滑滚动到相应页面位置: .. "返回顶部"按钮效果:向下滚动页面出现 按钮,点击返回顶部。 …………EN...

  • vue多个页面滚动相互之间影响

    在一个vue页面中滚动页面,点击链接跳转到新页面时,新页面的初始位置为旧页面滚动的位置。解决方案:https://...

  • 24-进阶:给简历加 JS(续)

    一. 点击menu后,滚动到对应的页面位置,在滚动页面过程中选取适当的位移曲线,达到需求的平滑效果 涉及到的一些C...

  • vue基于百度地图获取位置信息

    目的 在vue页面,基于百度地图获取访问当前H5页面用户的位置信息(经纬度) 1. 基于百度地图开放能力获取位置信...

  • 用sessionStorage实现页面刷新滚动位置记忆

    当用户从一个长页面滚动到某一个位置时,刷新或点击链接后返回该页面还从浏览的位置加载,即记忆浏览位置,首先引入jQu...

  • firefox浏览器下$("body").s

    最近在写一个当页面滚动到一定位置时,页面右下角出现一个 “返回顶部的按钮”,点击后返回页面最顶部位置。 一开始我是...

  • jQuery返回顶部的方法

    在页面中,当滚动条下滑到一定位置时就会出现返回顶部的图标,点击图标后页面平缓的回到顶部位置。到了顶部,这个图标又会...

网友评论

    本文标题:Vue3-百度地图所在页面滚动后点击位置错位问题解决

    本文链接:https://www.haomeiwen.com/subject/ajzhcrtx.html