uni-app中map地图在提交表单界面移动问题

发布于 1周前 作者 sinazl 来自 Uni-App

uni-app中map地图在提交表单界面移动问题

产品分类

uniapp/App

PC开发环境操作系统

Windows

PC开发环境操作系统版本号

Windows 11 家庭中文版 22631.3296

HBuilderX类型

正式

HBuilderX版本号

4.07

手机系统

Android

手机系统版本号

Android 11

手机厂商

小米

手机机型

小米9

页面类型

vue

vue版本

vue2

打包方式

离线

项目创建方式

HBuilderX

示例代码

<template>  
    <view class="pages">  
        <view style="height: 220px">  
            <mapGao ref="map" :map-width="mapWidth" :scale="scale" :longitude="param.longitude" :latitude="param.latitude" :markers="markers"></mapGao>  
        </view>  

        <view class="block_1 one" v-if="edit">  
            <view class="title">地质灾害点名称</view>  
            <view class="other">  
                <uni-data-select  
                    v-model="param.regionId"  
                    :localdata="regionList"  
                    placeholder="请选择地质灾害点">  
                </uni-data-select>  
            </view>  
        </view>  
        <view class="block_1 one" v-else>  
            <view class="title">地质灾害点名称</view>  
            <view class="other">  
                <text style="color:#999">{{ regionName }}</text>  
            </view>  
        </view>  

        <view class="block_1" v-if="edit">  
            <text>巡查结果</text>  
            <view class="block_1_i">  
                <uni-data-select  
                    v-model="param.status"  
                    :localdata="statusList"  
                    placeholder="请选择">  
                </uni-data-select>  
            </view>  
        </view>  
        <view class="block_1" v-else>  
            <text>巡查结果</text>  
            <view class="block_1_i end">  
                <view style="color: #999;width: 100%;">{{ param.status == 0 ? '异常':'正常' }}</view>  
            </view>  
        </view>  
    </view>  
</template>

操作步骤

请看附件中的视频

预期结果

地图不移动

实际结果

地图向上移动了

bug描述

在一个vue界面引用nvue组件的地图,页面滑动之后,使用uni-data-select组件下拉,地图会向上移动。

项目信息 描述
产品分类 uniapp/App
PC开发环境操作系统 Windows
PC开发环境操作系统版本号 Windows 11 家庭中文版 22631.3296
HBuilderX类型 正式
HBuilderX版本号 4.07
手机系统 Android
手机系统版本号 Android 11
手机厂商 小米
手机机型 小米9
页面类型 vue
vue版本 vue2
打包方式 离线
项目创建方式 HBuilderX

1 回复

uni-app 中使用 map 组件时,如果地图组件位于表单提交界面,可能会遇到地图与表单输入框的交互冲突问题。具体表现为:当用户点击地图进行拖动或缩放时,可能会意外触发输入框的聚焦事件,导致键盘弹出,影响用户体验。

解决方案

以下是一些常见的解决方案,可以帮助你避免地图与表单输入框的交互冲突:

1. 使用 controls 属性

map 组件提供了 controls 属性,可以在页面上添加一些控件(如缩放按钮、定位按钮等),用户可以通过这些控件来操作地图,而不是直接在地图上进行拖拽或缩放。这样可以减少与输入框的冲突。

<template>
  <map
    :controls="controls"
    style="width: 100%; height: 300px;"
    :latitude="latitude"
    :longitude="longitude"
    :markers="markers"
  ></map>
</template>

<script>
export default {
  data() {
    return {
      latitude: 39.90923,
      longitude: 116.397428,
      markers: [],
      controls: [
        {
          id: 1,
          iconPath: '/static/zoom-in.png',
          position: {
            left: 10,
            top: 10,
            width: 30,
            height: 30
          },
          clickable: true
        },
        {
          id: 2,
          iconPath: '/static/zoom-out.png',
          position: {
            left: 50,
            top: 10,
            width: 30,
            height: 30
          },
          clickable: true
        }
      ]
    };
  }
};
</script>

2. 使用 cover-viewcover-image

cover-viewcover-imagemap 组件的子组件,它们可以覆盖在地图之上,并且不会影响地图的交互。你可以使用它们来覆盖表单输入框,从而避免点击地图时触发输入框的聚焦事件。

<template>
  <map
    style="width: 100%; height: 300px;"
    :latitude="latitude"
    :longitude="longitude"
    :markers="markers"
  >
    <cover-view class="form-container">
      <input class="form-input" placeholder="请输入内容" />
    </cover-view>
  </map>
</template>

<style>
.form-container {
  position: absolute;
  top: 20px;
  left: 20px;
  width: 80%;
  background-color: white;
  padding: 10px;
  border-radius: 5px;
}

.form-input {
  width: 100%;
  height: 30px;
  border: 1px solid #ccc;
  padding: 5px;
}
</style>

3. 禁用输入框的自动聚焦

如果地图的点击事件触发了输入框的聚焦,你可以通过禁用输入框的自动聚焦来避免这个问题。

<template>
  <map
    style="width: 100%; height: 300px;"
    :latitude="latitude"
    :longitude="longitude"
    :markers="markers"
  >
    <input class="form-input" placeholder="请输入内容" :focus="false" />
  </map>
</template>

4. 动态控制键盘的显示

你可以通过监听地图的 tap 事件,在用户点击地图时隐藏键盘。

<template>
  <map
    style="width: 100%; height: 300px;"
    :latitude="latitude"
    :longitude="longitude"
    :markers="markers"
    @tap="hideKeyboard"
  >
    <input class="form-input" placeholder="请输入内容" ref="input" />
  </map>
</template>

<script>
export default {
  methods: {
    hideKeyboard() {
      this.$refs.input.blur();
    }
  }
};
</script>
回到顶部
AI 助手
你好,我是IT营的 AI 助手
您可以尝试点击下方的快捷入口开启体验!