vue 集成高德地图,点击图标,弹出van-action-sheet,一闪而过的问题探究

news2024/10/2 18:20:51

代码

 <van-action-sheet v-model="sheetShow" title="">
      <div class="van-list-vol">
        <van-col span="3">
          <div>
            <van-image
              style="height: 40px; width: 40px"
              round
              :src="
                hospital.orgUrl
                  ? hospital.orgUrl
                  : require('@/assets/images/icon/search_hospital.png')
              "
            />
          </div>
        </van-col>
        <van-col span="21" style="margin-bottom: 10px">
          <div style="display: flex; margin-bottom: 10px">
            <h3 style="margin: 0; padding: 0; flex-grow: 2">
              <span>{{ hospital.orgName }}</span>
            </h3>
          </div>

          <div>
            <label class="radius-blue" v-if="hospital.orgLevel">
              {{ lev[hospital.orgLevel]
              }}{{ hospital.orgGrade ? orgGrade[hospital.orgGrade] : "" }}
            </label>
          </div>

          <div style="margin: 5px 0; display: flex">
            <label style="font-size: 15px"></label>
            <div class="item-right" v-if="hospital.distance">
              距您{{ hospital.distance }}km |
            </div>
            <div
              style="font-size: 15px; margin-left: 5px; margin-right: 5px"
            ></div>
            <div class="item-left">
              {{ hospital.detailAddress || hospital.orgAddress }}
            </div>
          </div>
        </van-col>
        <div>
          <van-row style="margin-left: 20px; margin-top: 10px">
            <van-col span="5">
              <div @click="callTel(hospital)">
                <div class="text-center">
                  <div v-if="hospital.contactPhone">
                    <img src="@/assets/images/icon/map_phone.png" width="20" />
                    <p style="margin-top: 2px">电话</p>
                  </div>
                  <div v-else>
                    <img
                      src="@/assets/images/icon/map_nophone.png"
                      width="20"
                    />
                    <p style="margin-top: 2px; color: #a8a9af">电话</p>
                  </div>
                </div>
              </div>
            </van-col>
            <van-col span="5">
              <div @click="navigation(hospital)">
                <div class="text-center">
                  <img src="@/assets/images/icon/map_navi.png" width="20" />
                  <p style="margin-top: 2px">导航</p>
                </div>
              </div>
            </van-col>
            <van-col span="14">
              <van-button round block type="primary" @click="gotoHos(hospital)"
                >去预约</van-button
              >
            </van-col>
          </van-row>
        </div>
      </div>
    </van-action-sheet>
 hospitalMap() {
      let that = this;
      let markers = [];
      AMapLoader.load({
        key: "", //设置您的key
        version: "2.0",

        AMapUI: {
          version: "1.1",
          plugins: [],
        },
        Loca: {
          version: "2.0",
        },
      })
        .then((AMap) => {
          let center = [that.locationLon, that.locationLat];
          let zo = 10;
          if (window.map != null) {
            center = window.map.getCenter();
            zo = window.map.getZoom(2);
          }
          window.map = new AMap.Map("container", {
            viewMode: "3D",
            animateEnable: false, // 是否支持缓动效果
            zooms: [2, 22],
          });
          if (that.mapInit) {
            window.map.setCenter(center);
            window.map.setZoom(zo);
          }
          window.map.clearMap();
          // 构造矢量圆形
          var circle = new AMap.Circle({
            center: new AMap.LngLat(that.locationLon, that.locationLat), // 圆心位置
            radius: 1000, //半径
            strokeColor: "rgba(0,0,255,1)", //线颜色
            strokeOpacity: 0.5, //线透明度
            strokeWeight: 0.5, //线粗细度
            fillColor: "rgba(0,0,255,1)", //填充颜色
            fillOpacity: 0.2, //填充透明度
          });
          window.map.add(circle);

          var locationMarker = new AMap.Marker({
            map: map,
            position: [that.locationLon, that.locationLat],
            icon: require("@/assets/images/icon/web_location.png"),
            offset: new AMap.Pixel(-18, -40),
          });
      
          window.map.add(locationMarker);

          for (var i = 0; i < that.mapList.length; i++) {
            var marker;
            let item = that.mapList[i];
            // console.log("地图marker", item);

            let imageUrl = require("@/assets/images/icon/web_yy.png");
            if (item.orgType) {
              if (item.orgType.indexOf("CHSC") > -1) {
                imageUrl = require("@/assets/images/icon/web_sq.png");
              }
              if (item.orgType.indexOf("healthCenter") > -1) {
                imageUrl = require("@/assets/images/icon/web_ws.png");
              }
              if (item.orgType.indexOf("clinic") > -1) {
                imageUrl = require("@/assets/images/icon/web_mz.png");
              }
              if (item.orgType.indexOf("MCH") > -1) {
                imageUrl = require("@/assets/images/icon/web_fb.png");
              }
              if (item.orgType.indexOf("other") > -1) {
                imageUrl = require("@/assets/images/icon/web_qt.png");
              }
            }

            if (item.latitude && item.longitude) {
            
              let positionV = [item.longitude, item.latitude];
              marker = new AMap.Marker({
                map: map,
                position: positionV,
                icon: imageUrl,
                offset: new AMap.Pixel(-18, -40),
              });

              // label默认蓝框白底左上角显示,样式className为:amap-marker-label
              marker.setLabel({
                direction: "top",
                offset: new AMap.Pixel(0, 0), //设置文本标注偏移量
                content:
                  "<div style='font-weight:bold;fontSize: 14'>" +
                  item.orgName +
                  "</div>", //设置文本标注内容
              });
            }
            var onMarkerClick = function (e) {
              console.log("marker 点击");
              that.hospital = item;
   			  that.sheetShow = true;
            };
            marker.on("click", onMarkerClick); //绑定click事件

            markers.push(marker);
          }

          window.map.add(markers);
          setTimeout(() => {
            if (markers.length > 3) {
              let firstFewMarker = markers.slice(0, 3); //取前十个marker
              firstFewMarker.push(locationMarker);
              window.map.setFitView(firstFewMarker, true, [50, 60, 50, 60]);
            }
          }, 800);
        })
        .catch((e) => {
          console.log(e);
        });
    },

现象

点击地图上的图标,然后sheetShow 为true,弹框一闪而过

探究

地图图标点击,然后呢,设置sheetShow 为true,弹出van-action-sheet,逻辑上是没错的,我把这个代码放在地图外的控件,是可以正确弹出对话框的,然后在浏览器模式下,是正常能弹出的,切换成手机模式,又不能弹出
在这里插入图片描述
如果是van-action-sheet问题,在地图外的地方能弹出,就应该能排除,如果是地图图标点击代码的问题,在浏览器模式下又能弹出,也就不存在兼容性的问题了,很难排查
后来和公司前端大佬交流,找到了问题,地图图标点击的时候,会刷新地图,van-action-sheet刚弹出来,地图刷新了,van-action-sheet就消失了,所以才出现一闪而过,这样就好解决了,在点击事件里边,加一个延时,刷新完了,在弹出对话框

 var onMarkerClick = function (e) {
              console.log("marker 点击");
              that.hospital = item;
              setTimeout(() => {
                that.sheetShow = true;
              }, 100);
             
            };

我这边试了一下this.$nextTick,没有效果,就先加个延时吧

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1180148.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

玻色量子“揭秘”之最大割(Max-Cut)问题与QUBO建模

Max-Cut问题简单地说&#xff0c;就是求一种分割方法。给定一张无向图, 将所有顶点分割成两群, 同时使得被切断的边数量最大&#xff0c;或边的权重最大。 QUBO&#xff08;Quadratic Unconstrained Binary Optimization&#xff09;问题即二次无约束二值优化问题&#xff0c;…

Vue3 + Vite + Ts + Router搭建项目

1、新建文件夹 从新建的文件夹cmd进入终端 2、安装vite—依据vite创建vue3项目 2.1、运行 npm init vitelatest2.2.1、输入项目名称 2.2.2、选择vue 2.2.3、选择TypeScript语言 3、安装依赖项 3.1、进入刚才创建的文件夹 cd vite-project 3.2、查看镜像 #查看当前源 npm con…

Windows ObjectType Hook 之 SecurityProcedure

1、背景 Object Type Hook 是基于 Object Type的一种深入的 Hook&#xff0c;比起常用的 SSDT Hook 更为深入。 有关 Object Type 的分析见文章 《Windows驱动开发学习记录-ObjectType Hook之ObjectType结构相关分析》。 这里进行的 Hook 为 其中之一的 SecurityProcedure。文章…

CDS(Core Data Service)Annotation 常用属性

1. 抬头信息 @UI: {headerInfo: {typeName: BP,typeNamePlural: BP,title:{type: #STANDARD, value:ApplyNumber},description:{value:Status}} }2. 行信息/分组 @UI.facet: [{id: bp_Tab1,purpose: #STANDARD,type: #FIELDGROUP_REFERENCE,// type: #LINEITEM_REFERENCE,labe…

【Linux】 OpenSSH_7.4p1 升级到 OpenSSH_9.4p1(亲测无问题,建议收藏)

&#x1f468;‍&#x1f393;博主简介 &#x1f3c5;云计算领域优质创作者   &#x1f3c5;华为云开发者社区专家博主   &#x1f3c5;阿里云开发者社区专家博主 &#x1f48a;交流社区&#xff1a;运维交流社区 欢迎大家的加入&#xff01; &#x1f40b; 希望大家多多支…

lazarus:不安装任何驱动,直接使用csv文件作为数据集

目录 1 简介 2 需要的窗体控件很简单 3 定义字段并插入几条记录 4 其他操作 4.1 数据集保存为csv文件 4.2 清空数据 4.3 加载csv文件 5 运行程序 6 导出文件 1 简介 在某些数据操作需求特别简单的情况下&#xff0c;我们希望不要安装任何数据库&#xff0c;甚至连一个…

餐饮加盟信息展示预约小程序的内容如何

餐饮业规模持续增加&#xff0c;相关从业者逐渐增多&#xff0c;对中等规模以上的餐饮品牌来说&#xff0c;当有一定规模后除了开多家直营店外&#xff0c;还会开放招商加盟&#xff0c;扩展品牌、提升营收等。 由于餐饮加盟属于准属性业务&#xff0c;因此传统线下方式不太适…

投资理财:买理财亏损不保本怎么办?

大家好&#xff0c;我是财富智星&#xff0c;今天跟大家讨论一下投资理财&#xff0c;银行理财亏损不保本了&#xff0c;普通老百姓应该怎么办&#xff1f; 银行理财已经不再是保本且没有风险的产品了。对于追求稳健增值的大多数普通人来说&#xff0c;银行理财已经不再是他们的…

Python TCP服务端多线程接收RFID网络读卡器上传数据

本示例使用设备介绍&#xff1a;WIFI/TCP/UDP/HTTP协议RFID液显网络读卡器可二次开发语音播报POE-淘宝网 (taobao.com) #python通过缩进来表示代码块&#xff0c;不可以随意更改每行前面的空白&#xff0c;否则程序会运行错误&#xff01;&#xff01;&#xff01;如果缩进不…

「Verilog学习笔记」使用generate…for语句简化代码

专栏前言 本专栏的内容主要是记录本人学习Verilog过程中的一些知识点&#xff0c;刷题网站用的是牛客网 分析 generate…for语句是Verilog HDL语言特有的语句&#xff0c;使用循环结构编写可综合的多个形式相近的代码&#xff0c;循环变量必须由特定关键字genvar声明。 timesca…

IDEA Plugin插件开发相关踩坑

1 前言 最近在研究IDEA插件开发&#xff0c;踩了不少坑&#xff0c;特意在这里记录一下…… 2 Java相关类找不到 照着网上一些资料&#xff0c;想要实现代码审计自动提示功能&#xff0c;需要继承AbstractBaseJavaLocalInspectionTool 结果import一片爆红&#xff0c;找不到相…

StackOverflow调查:2021-2022薪酬最高的编程语言

我应该学习哪种编程语言&#xff1f; 对于有抱负的软件工程师来说&#xff0c;这是最常见的问题&#xff0c;答案始终是&#xff1a;这取决于您的偏好以及您想要构建的内容。 但也许您想采取另一条路线并学习公司为您支付最高费用的语言。 如果是这样的话&#xff0c;这篇文章适…

GPT-2:基于无监督多任务学习的语言模型

欢迎来到魔法宝库&#xff0c;传递AIGC的前沿知识&#xff0c;做有格调的分享❗ 喜欢的话记得点个关注吧&#xff01; 今天&#xff0c;我们将共同探索OpenAI的GPT-2&#xff0c;跟随论文深入理解其技术细节。 论文&#xff1a;Language Models are Unsupervised Multitask Le…

ORACLE数据库初始化导入

ORACLE数据库初始化导入 文章目录 ORACLE数据库初始化导入创建表空间创建用户用户授权临时目录授权数据库目录授权导入dump文件 环境&#xff1a;linux 数据库&#xff1a;oracle 19c 创建表空间 -- 查询已创建目录 select directory_path,directory_name from all_directori…

Redis之与SSM集成Spring注解式缓存

&#x1f389;&#x1f389;欢迎来到我的CSDN主页&#xff01;&#x1f389;&#x1f389; &#x1f3c5;我是君易--鑨&#xff0c;一个在CSDN分享笔记的博主。&#x1f4da;&#x1f4da; &#x1f31f;推荐给大家我的博客专栏《Redis实战开发》。&#x1f3af;&#x1f3af; …

大数据学习之Spark性能优化

文章目录 Spark三种任务提交模式宽依赖和窄依赖StageSpark Job的三种提交模式 Shuffle机制分析未优化的Hash Based Shuffle优化后的Hash Based ShuffleSort-Based Shuffle Spark之checkpointcheckpoint概述checkpoint与持久化的区别checkPoint的使用checkpoint源码分析 Spark程…

vue前端实现多个url下载并合并为zip文件

一、安装 npm install jszip npm install file-saver 二、引入 import axios from axios import JSZip from "jszip"; import FileSaver from "file-saver"; 三、核心代码 videoData:[/video/26519f026fc012521605563015227403.mp4,/video/f7b9cdae14…

聊聊芯片超净间的颗粒(particle)

在芯片制造领域&#xff0c;颗粒的存在可能对生产过程产生巨大影响。其中&#xff0c;每个微小的颗粒&#xff0c;无论是来自人员、设备&#xff0c;还是自然环境&#xff0c;都有可能在制程中引发故障&#xff0c;从而对产品性能产生负面影响。这就是为什么在芯片厂中&#xf…

【日积月累】SpringBoot 通过注解@CacheConfig @Cacheable @CacheEvict @CachePut @Caching使用缓存

目录 1.前言2.引入依赖3.启动类加入注解EnableCaching4.常用注解4.1CacheConfig4.2Cacheable4.3CacheEvict4.4CachePut4.5Caching 5.总结6.参考 文章所属专区 日积月累 1.前言 Spring在3.1版本&#xff0c;就提供了一条基于注解的缓存策略&#xff0c;实际使用起来还是很丝滑…

【内功修炼】详解函数栈帧的创建和销毁

文章目录 1. 什么是函数栈帧2. 理解函数栈帧能解决什么问题呢&#xff1f;3. 函数栈帧的创建和销毁解析3.1 什么是栈&#xff1f;3.2 认识相关寄存器和汇编指令常见寄存器常用汇编指令 3.3 详解函数栈帧的创建和销毁3.3.1 函数的调用堆栈&#xff08;main函数也是被其它函数调用…