antv/l7地图,鼠标滚动,页面正常滑动-- 我们忽略的deltaY

背景

在官网项目中,需要使用一个地图,展示产品的分布区域及数量。希望的交互是,鼠标放上标点,tooltip展示地点和数量等信息。鼠标滚动,则页面随着滚动。但是鼠标事件是被地图代理了的,鼠标滚动意味着地图的缩放。

问题解决

我们首先想到的就是关闭地图的缩放

js 复制代码
     const scene = new Scene({
        id: 'map',
        map: new GaodeMap({
          zIndex: 0,
          pitch: 0,
          style: 'light',
          center: [36.753416,33.142173],
          zoom: 1,
          rotateEnable: false,
          zoomEnable: false,  // 关闭地图缩放
          dragEnable: false  // 关闭拖拽
        }),
        logoVisible: false,
      })

这个设置了之后,我们发现鼠标在地图上是滚不动的状态,就是我们无论如何滚动鼠标,页面都没有动静。其实就是我们的鼠标事件被地图给代理了,但是他这里没有处理我们禁用了缩放和拖拽之后,将鼠标事件脱离代理。

然后我们就开始想解决办法:

  • 在地图上套一层空的蒙层?
    这样解决了滚动,但是我们不能影响鼠标的hover效果

    所以蒙层这个方案不太可行。。。。。
  • 重写鼠标事件
    我们去翻API文档,发现了他🈶️抛出鼠标事件的监听回调

    我们要用的就是这个鼠标滚动的事件mousewheel,当找到这个事件的第一时间,其实我也是不知道怎么去做的,一直在思考,怎么让它动起来,我能想到使用scrollTop 去做,但是实在想不到每次该改变多少,方向如何。这其实就是因为我不知道deltaY这个属性的存在。最后老大给我说有个属性可以知道鼠标滚动的量,一查就是这玩意儿。前辈果然还是前辈,经验是什么都换不来的。当然还是自己接触的太少了,学习的不够。

    最后的解法scrollTop + deltaY:
js 复制代码
       scene.on('mousewheel', (ev) => {
          document.documentElement.scrollTop += ev.originEvent.deltaY
        })

小结

以此记录一下这个问题的解决办法,也加深一下自己对这个属性的了解。

相关推荐
风送雨19 小时前
FastMCP 2.0 服务端开发教学文档(下)
服务器·前端·网络·人工智能·python·ai
XTTX11019 小时前
Vue3+Cesium教程(36)--动态设置降雨效果
前端·javascript·vue.js
LYFlied20 小时前
WebGPU与浏览器边缘智能:开启去中心化AI新纪元
前端·人工智能·大模型·去中心化·区块链
Setsuna_F_Seiei20 小时前
2025 年度总结:人生重要阶段的一年
前端·程序员·年终总结
model200520 小时前
alibaba linux3 系统盘网站迁移数据盘
java·服务器·前端
han_21 小时前
从一道前端面试题,谈 JS 对象存储特点和运算符执行顺序
前端·javascript·面试
aPurpleBerry21 小时前
React 01 目录结构、tsx 语法
前端·react.js
jayaccc21 小时前
微前端架构实战全解析
前端·架构
qingyun9891 天前
Web Components 实战:创建自定义比例条组件
前端
前端小超超1 天前
ionic + vue3 + capacitor遇到backButton问题
前端·javascript·vue.js