uni-app map组件Marker callout和title点击隐藏后仍覆盖原显示区域,导致该区域无法点击

uni-app map组件Marker callout和title点击隐藏后仍覆盖原显示区域,导致该区域无法点击

开发环境 版本号 项目创建方式
Mac macOS 15.1 HBuilderX
iOS iOS 18

示例代码:

[
    {
        "id": "547758592",
        "latitude": 30.335474608699858,
        "longitude": 120.12088942579587,
        "title": "8600650792398610",
        "width": "31",
        "height": "38",
        "state": 1,
        "deviceType": 8,
        "callout": {
            "bgColor": "#5AC2EB",
            "color": "#fff",
            "content": "zt001\n8600650792398610",
            "display": "BYCLICK",
            "fontSize": "14",
            "fontWeight": "bold",
            "padding": 8,
            "textAlign": "center"
        },
        "iconPath": "/static/img/marker/2x/es_online.png"
    },
    {
        "id": "675096064",
        "latitude": 30.335476526174677,
        "longitude": 120.12077344608137,
        "title": "8600650791660070",
        "width": "31",
        "height": "38",
        "state": 1,
        "deviceType": 8,
        "callout": {
            "bgColor": "#5AC2EB",
            "color": "#fff",
            "content": "zt002\n8600650791660070",
            "display": "BYCLICK",
            "fontSize": "14",
            "fontWeight": "bold",
            "padding": 8,
            "textAlign": "center"
        },
        "iconPath": "/static/img/marker/2x/es_online.png"
    }
]

操作步骤:

如描述

预期结果:

如描述

实际结果:

如描述

bug描述:

ios平台,nvue页面,map组件,marker图标被点击时,会显示callout或title,点击其他maker或者空白区域时,callout消失,但发现如果callout显示时遮盖住了其他marker, 即使此callout消失,也会导致原先被覆盖的marker无法被点击.

安卓平台正常,无此问题

4.15版本ios同样有这个问题


更多关于uni-app map组件Marker callout和title点击隐藏后仍覆盖原显示区域,导致该区域无法点击的实战教程也可以访问 https://www.itying.com/category-93-b0.html

3 回复

无人回答

更多关于uni-app map组件Marker callout和title点击隐藏后仍覆盖原显示区域,导致该区域无法点击的实战教程也可以访问 https://www.itying.com/category-93-b0.html


置顶

在uni-app中,使用map组件时,如果Marker的callouttitle在点击隐藏后仍然覆盖原显示区域,这通常是因为相关的样式或事件处理没有正确设置。为了确保Marker的callouttitle在隐藏后不会阻挡点击事件,你可以尝试以下方式处理。

首先,确保你使用了uni-app提供的API来正确控制callouttitle的显示与隐藏。这里是一个基本的示例,展示了如何动态控制Markercallout显示:

<template>
  <view>
    <map :longitude="longitude" :latitude="latitude" style="width: 100%; height: 300px;">
      <marker
        v-for="(marker, index) in markers"
        :key="index"
        :id="marker.id"
        :latitude="marker.latitude"
        :longitude="marker.longitude"
        :callout="{content: marker.name, display: marker.showCallout}"
        @tap="onMarkerTap(marker)"
      ></marker>
    </map>
  </view>
</template>

<script>
export default {
  data() {
    return {
      longitude: 116.404,
      latitude: 39.915,
      markers: [
        { id: 1, latitude: 39.915, longitude: 116.404, name: 'Marker 1', showCallout: false },
        // 更多marker数据...
      ]
    };
  },
  methods: {
    onMarkerTap(marker) {
      // 切换callout显示状态
      marker.showCallout = !marker.showCallout;
      // 强制重新渲染map组件(如果需要)
      this.$forceUpdate();
    }
  }
};
</script>

在上面的代码中,我们通过marker.showCallout来控制callout的显示与隐藏。当用户点击Marker时,onMarkerTap方法会被触发,切换showCallout的状态。

如果callouttitle在隐藏后仍然阻挡点击事件,这可能是由于样式或者渲染层级的问题。你可以尝试以下方法:

  1. 确保样式正确:检查是否有CSS样式影响了map组件或Marker的渲染层级。

  2. 使用setTimeout:有时候,由于渲染延迟,你可能需要在切换显示状态后使用setTimeout来确保样式更新完成。

  3. 检查地图组件的bug:确保你使用的uni-app版本没有已知的bug影响map组件。如果有,考虑升级到最新版本或者查找相关的issue和patch。

  4. 使用覆盖层:如果上述方法都无效,可以考虑使用自定义的覆盖层来模拟Marker的行为,这样可以完全控制其显示与隐藏的逻辑和样式。

通过上述方法,你应该能够解决Marker的callouttitle隐藏后仍覆盖原显示区域的问题。

回到顶部