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
        })

小结

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

相关推荐
乆夨(jiuze)5 分钟前
记录H5内嵌到flutter App的一个问题,引发后面使用fastClick,引发后面input输入框单击无效问题。。。
前端·javascript·vue.js
忧郁的蛋~26 分钟前
HTML表格导出为Excel文件的实现方案
前端·html·excel
小彭努力中27 分钟前
141.在 Vue 3 中使用 OpenLayers Link 交互:把地图中心点 / 缩放级别 / 旋转角度实时写进 URL,并同步解析显示
前端·javascript·vue.js·交互
然我1 小时前
别再只用 base64!HTML5 的 Blob 才是二进制处理的王者,面试常考
前端·面试·html
NanLing1 小时前
【纯前端推理】纯端侧 AI 对象检测:用浏览器就能跑的深度学习模型
前端
呆呆的心1 小时前
前端必学:从盒模型到定位,一篇搞定页面布局核心 🧩
前端·css
小飞悟1 小时前
前端高手才知道的秘密:Blob 居然这么强大!
前端·javascript·html
小old弟1 小时前
用Sass循环实现炫彩文字跑马灯效果
前端
code_YuJun1 小时前
Promise 基础使用
前端·javascript·promise
Codebee1 小时前
OneCode自主UI设计体系:架构解析与核心实现
前端·javascript·前端框架