Mapbox1.x transform:scale 缩放坐标偏移bug修复方案

如图所示,以下是触发问题的步骤:
  1. 创建地图

  2. 设置transform scale(0.9)在地图容器上,或用fullScreen

  3. map.resize()更新画布

效果展示:

在这里插入图片描述

解决方法:

方案1:

修复mapbox地图源码-计算事件坐标添加位置的函数

函数在下载的源码以下位置:
在这里插入图片描述

mousePos(el: HTMLElement, e: MouseEvent | WheelEvent): Point {
    const rect = el.getBoundingClientRect();
    return getScaledPoint(el, rect, e);
}

getScaledPoint(el: HTMLElement, rect: ClientRect, e: MouseEvent | WheelEvent | Touch) {
    const scaling = el.offsetWidth === rect.width ? 1 : el.offsetWidth / rect.width;
    return new Point(
        (e.clientX - rect.left) * scaling,
        (e.clientY - rect.top) * scaling
    );
}

一张图描述以上代码返回的坐标计算

在这里插入图片描述
以上的canvas元素如果进行缩小那rect.left和el.clientLeft中间会有空出空白空间没法计算得到的point坐标是错误的。

解决思路:

把point变成鼠标指针相对于目标节点内边位置的 X和Y 坐标

mousePos = function (el: HTMLElement, e: MouseEvent | WheelEvent) {
    e = e.touches ? e.touches[0] : e;
    return new Point(
        e.offsetX,
        e.offsetY
    );
};
方案2:

用Unfull进行反缩放

效果缺点:左侧是按高保真设计样式,右侧反缩放不能和高保真保持一样,需要计算缩放值

在这里插入图片描述

方案3:

用iframe进行嵌入

效果缺点:iframe会阻塞页面加载时间

在这里插入图片描述

评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值