解决页面整体使用transform scale后高德地图点位点击偏移错位问题

问题描述:

在网页中使用CSS的transform:scale方法放大缩小页面后,高德地图上的点位位置会出现偏移错位的问题。这可能会影响网页的交互效果。

解决方法:

这个问题的解决方案是将高德地图的点位标注放在一个单独的div中,并在这个div上应用transform:scale,以避免锚点偏移的问题。

步骤如下:

  1. 创建一个新的div,将高德地图点位标注的集合放在这个新的div中:
<div id="map">
  <div class="marker-group"></div>
</div>
  1. 在CSS中将这个新的div设置为我们需要的缩放值:
#map {
  transform: scale(0.8);
}
  1. 在JS中通过高德地图API获取点位标注数据,并通过循环将每个标注添加到新div中:
var markers = [];
for (var i = 0; i < data.length; i++) {
  var marker = new AMap.Marker({
      position: data[i].position,
      icon: data[i].icon
  });
  marker.setMap(map);
  markers.push(marker);
}
$(".marker-group").append(markers);

这样做的效果是所有的点位标注将会被添加到一个单独的div中,并且这个div被应用了缩放值,而不是整个页面。这样就可以解决我们在缩放页面后,点位标注位置偏移错位的问题。

示例1:

代码示例见:https://jsfiddle.net/Lh7zjbfe/4/

在这个示例中,我们创建了一个 div#map 元素,并将其放在一个固定大小的容器中(使用样式 width: 400px; height: 400px)。

我们添加了一个 AMap.Map 的实例,并将其绑定到 div#map:

var map = new AMap.Map("map", {
  zoom: 13,
  center: [116.397428, 39.90923]
});

最后,我们根据一些点坐标信息添加若干个 marker(标记):

for (var i = 0; i < markers.length; i++) {
  var marker = new AMap.Marker({
    position: markers[i].position,
    map: map
  });

  // 将 marker 保存至集合中
  markerCollection.push(marker);
}

使用样式 transform: scale(.5) 缩小 div#map 的大小,我们可以发现所有的 marker 的位置都出现了偏差。

示例2:

代码示例见:https://jsfiddle.net/wb1x9f75/3/

在这个示例中,我们通过将所有的 marker 都放在一个 div.marker-group 中,然后给这个 div 元素应用一个确定的缩放样式,从而避免了 marker 偏差的问题。

首先,我们在 HTML 中创建了我们需要的 div 元素:

<div id="container" style="width: 400px; height: 400px;">
  <div id="map"></div>
</div>

接下来,使用如下的 CSS 样式,我们将 div#map 缩放至 scale(.5),同时设置其 transform-origin 为左上角(0 0):

#map {
  width: 100%;
  height: 100%;

  /* 调整为适当的缩放比例 */
  transform: scale(.5);

  /* 设置缩放的中心为左上角 */
  transform-origin: 0 0;
}

最后,根据一些点坐标信息添加若干个 marker(标记)到 div.marker-group 中:

for (var i = 0; i < markers.length; i++) {
  var marker = new AMap.Marker({
    position: markers[i].position,
    map: map
  });

  // 将 marker 保存至集合中
  markerCollection.push(marker);

  // 添加 marker 到 div.marker-group 中
  $('.marker-group').append(marker.getContent().cloneNode(true))
}

这样做的效果是所有的 marker 都被添加到了一个单独的 div.marker-group 中,而不是整个页面上。这个 div 元素被应用了一个缩放样式后,所有的 marker 的位置都不再出现偏差。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:解决页面整体使用transform scale后高德地图点位点击偏移错位问题 - Python技术站

(0)
上一篇 2023年6月10日
下一篇 2023年6月10日

相关文章

  • 详解coreldraw x8新功能

    详解CorelDRAW X8新功能 CorelDRAW X8是一款强大的平面设计软件,它集成了许多新功能,使用户能够更快速、更高效地进行设计工作。以下将详细讲解CorelDRAW X8的新功能及其使用方法。 切割工具 在CorelDRAW X8中,新增加了一个强大的切割工具,可以让用户根据图形进行精确的切割。其具体使用方法如下: 选择要进行切割的图形。 点击…

    css 2023年6月10日
    00
  • 简述AngularJS相关的一些编程思想

    讲解AngularJS相关的编程思想,首先需要知道一些AngularJS的核心概念。 核心概念 双向数据绑定 AngularJS最大的特点之一便是双向数据绑定,如果把在DOM(input/input/select)中输入的数据称为Model,把显示在页面中的数据称为View,那么在AngularJS中这两个数据之间便可以直接进行双向绑定。当Model改变时V…

    css 2023年6月9日
    00
  • 纯CSS打字动画的实现示例

    下面是“纯CSS打字动画的实现示例”的完整攻略: 1. 前置知识 在学习本攻略前,需要掌握以下前置知识: HTML和CSS基础语法 CSS动画基础知识 CSS选择器 2. 实现步骤 2.1 创建HTML结构 首先,需要创建一个含有文字的HTML元素,如下所示: <p class="typing-text">这是一段需要打字动画…

    css 2023年6月9日
    00
  • html+css3太阳系行星运转动画效果的实现代码

    接下来我将为你介绍如何实现 HTML 和 CSS3 制作太阳系行星运转动画效果,并提供两条示例说明。 HTML + CSS3 制作太阳系行星运转动画效果——完整攻略 第一步:HTML 结构 我们首先来创建 HTML 结构,包含太阳、行星和轨道等元素。 <div class="sun"></div> <div …

    css 2023年6月9日
    00
  • CSS实现标签效果的示例代码

    这里是CSS实现标签效果的完整攻略,既可以在HTML中进行操作,也可以在CSS样式表中进行设置。 HTML中实现标签效果 在HTML中,可以使用<span>标签来实现标签效果,然后在CSS中进行样式设置。示例如下: <p>这是一个<span class="tag">标签</span>的示例&…

    css 2023年6月9日
    00
  • 基于JavaScript实现新年贺卡特效

    实现新年贺卡特效的基本思路是借助 JavaScript 的 Canvas API 绘制图形和动画效果。 第一步:创建 HTML 页面 首先要新建一个 HTML 页面,并设定好 canvas 元素的宽高和 id,例如: <body> <canvas id="myCanvas" width="400" h…

    css 2023年6月10日
    00
  • IE8开发人员工具的菜单讲解

    让我来为您介绍一下IE8开发人员工具的菜单讲解。 1. 如何打开IE8开发人员工具 在IE8浏览器中,切换到要调试的页面,然后按下键盘上的F12键,即可打开IE8开发人员工具。 2. 菜单栏讲解 IE8开发人员工具菜单栏一般分为以下几个部分: 2.1 文件菜单 文件菜单用于在IE8开发人员工具中打开文件,可以在其中选择打开本地文件,或者在页面中选择到远程文件…

    css 2023年6月10日
    00
  • Bootstrap免费字体和图标网站(值得收藏)

    Bootstrap是一款常用的前端开发框架,它提供了丰富的UI组件和功能,用于快速搭建美观且响应式的网站。但是,其中的字体和图标资源需要外部链接或下载,这会增加我们的耗时和工作量。 为了解决这个问题,Bootstrap官方提供了一份免费的字体和图标资源,它们可以直接在项目中使用,且不需要链接或下载。这份资源可通过Bootstrap免费字体和图标网站进行获取。…

    css 2023年6月9日
    00
合作推广
合作推广
分享本页
返回顶部