You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Vite环境下使Mapael地图正常工作?

Angular迁移到Vite后Mapael地图问题的解决方案

问题1:切换到Vite后地图加载报错

原项目在Webpack下运行正常,迁移到Vite后地图加载失败,核心原因是Vite要求ES6 Module风格的导入,修改导入方式即可解决:

import jquery from "jquery"
import mapael from "jquery-mapael"

(function (factory) {
    if (typeof exports === 'object') {
        // CommonJS
        module.exports = factory(jquery, mapael);
    }
    // 其他非必要条件可移除
})

问题2:jquery-mousewheel依赖兼容问题(鼠标滚轮仅能缩小)

地图加载成功后,出现鼠标滚轮只能缩小不能放大的异常,可通过以下步骤修复:

步骤1:模板中添加模板变量

在地图容器的div上添加#map模板变量:

<article id="map">
    <div #map class="map-canvas">
        <div class="map">
            <span></span>
        </div>
        <div class="areaLegend">
            <span></span>
        </div>
    </div>
</article>

步骤2:通过@ViewChild获取地图实例

在组件类中获取地图DOM实例:

@ViewChild('map') map: any;

步骤3:初始化地图时禁用内置鼠标滚轮缩放

在Mapael的初始化配置中,显式关闭内置的鼠标滚轮缩放功能:

zoom: {
  enabled: true,
  maxLevel: 10,
  mousewheel: false
},

步骤4:自定义鼠标滚轮事件实现缩放逻辑

绑定自定义的鼠标滚轮事件,手动控制缩放级别:

$(this.map.nativeElement).on("mousewheel", (event) => {
  event.preventDefault();
  event.stopPropagation();

  const deltaY = (event.originalEvent as any).deltaY;
  const mapZoomData = $(this.map.nativeElement).data('mapael').zoomData;
  let zoomLevel = mapZoomData.zoomLevel;

  if (deltaY > 0) {
    zoomLevel++
  } else {
    zoomLevel--
  }
  
  $(this.map.nativeElement).trigger('zoom', { level: zoomLevel, fixedCenter: true });
})

以上是简化版的缩放实现,组合后即可实现地图的正常缩放功能。

内容的提问来源于stack exchange,提问作者ak.leimrey

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.26 00:30:58