WEB引用百度地图页面自适应后获取的点位不正确处理

页面自适应采用 transform: "scale()"方式,

  • 获取当前页面的分辨率
  • 获取当前页面的长宽和设计的页面的长宽的倍数
  • 采用scale将长宽按倍数进行放大缩小
          let w = $(window).width();
          let h = $(window).height();
          let ratioX = w / 1920;
          let ratioY = h / 1080;
          $('html').css({
            transform: "scale(" + ratioX + "," + ratioY + ")",
            transformOrigin: "left top",
            backgroundSize: "100% 100%",
            width: 1920 + "px",
            height: 1080 + "px",
            overflow: 'hidden',
          });

    上面是页面自适应的方式,这样嵌入的百度地图也会进行自适应缩小放大,这个时候鼠标在百度地图点位是跟真实的点位不对应的。解决方案如下:

  • 获取放大缩小后的坐标相对于父元素的位置

  • 将X,Y等比例还原

    
    //将父元素的相对位置放入缓存
    this.$nextTick(() => {
          let mapLocal = this.getElementPos($(".out-container")[0]);
          localStorage.setItem("mapLocal", JSON.stringify(mapLocal));
        })
    
     //计算父元素的相对位置
        getElementPos(el) {
          if (el.parentNode === null || el.style.display == 'none') {
            return false;
          }
          var parent = null;
          var pos = [];
          var box;
          if (el.getBoundingClientRect) {     //IE
            box = el.getBoundingClientRect();
            var scrollTop = Math.max(document.documentElement.scrollTop, document.body.scrollTop);
            var scrollLeft = Math.max(document.documentElement.scrollLeft, document.body.scrollLeft);
            return {x: box.left + scrollLeft, y: box.top + scrollTop};
    
          } else {
            pos = [el.offsetLeft, el.offsetTop];
            parent = el.offsetParent;
            if (parent != el) {
              while (parent) {
                pos[0] += parent.offsetLeft;
                pos[1] += parent.offsetTop;
                parent = parent.offsetParent;
              }
            }
          }
          return {x: pos[0], y: pos[1]};
        },
    //在百度获取坐标进行还原
    let mapLocal = localStorage.getItem("mapLocal");
    let ratioX1 = Number(localStorage.getItem('ratioX'));
    let ratioY1 = Number(localStorage.getItem('ratioY'));
                  if (mapLocal) {
                    mapLocal = JSON.parse(mapLocal);
                  }
                  if (mapLocal) {
                    ax = (a.clientPos.x - mapLocal.x) / ratioX1;
                    ay = (a.clientPos.y - mapLocal.y) / ratioY1;
                  } else {
                    ax = a.x;
                    ay = a.y;
                  }

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值