高德地图用vue给窗体事件添加点击事件

如果直接添加调用的话会报 xxxis not defined at HTMLAnchorElement.onclick

HTMLAnchorElement:接口表示超链接元素,并提供一些特别的属性和方法(除了那些继承自普通 HTMLElement对象接口的之外)以用于操作这些元素的布局和显示。
这时HTMLAnchorElement 找不到定义的点击事件 需要初始化的时候加在 window里面

  marker.content =  lnglats[i].name+""+lnglats[i].tel +" "+  (lnglats[i].address==null?" ":lnglats[i].address);

<template>
  <div class="mapmain">
    <van-row>
      <van-col span="12">
        <button
          v-bind:class="[isActive ? 'myorder_active' : 'disActive']"
          @click="xq"
        >
          分公司
        </button>
      </van-col>
      <van-col span="12">
        <button
          v-bind:class="[lsActive ? 'myorder_active' : 'disActive']"
          @click="ly"
        >
          分理处
        </button>
      </van-col>
    </van-row>

    <!-- <div id="pickerBox">
      <input id="pickerInput" placeholder="请输入关键字选取地点" />
      <div id="poiInfo"></div>
    </div> -->
    <div id="container">
      <!-- <div id="centerCoord"></div> -->
    </div>
  </div>
</template>
<script>
import {
  queryCityBranch, //分理处
  queryAreaBr, //分公司
} from "@/api/getData";
import AMap from "AMap"; //在页面中引入高德地图
import AMapUI from "AMapUI";
import { Toast } from "vant";
export default {
  name: "mapmain",
  data() {
    return {
      city: "郑州",
      map: "",
      infoWindow: "",
      isActive: false,
      lsActive: true,
      thisPosition: {
        address: "",
        lng: "",
        lat: "",
        city: "",
        citycode: "",
      },
      flc: [],
    };
  },
  methods: {
    //
    xq() {
      this.flc.length = 0;
      this.isActive = false;
      this.lsActive = true;
      this.getqueryAreaBr();
    },
    ly() {
      this.flc.length = 0;
      this.isActive = true;
      this.lsActive = false;
      this.getqueryCityBranch();
      this.loadmap()
    },
    loadmap() {
      let that = this;
      // 分公司
      if (!this.isActive) {
        // alert(222)
        that.map = new AMap.Map("container",{resizeEnable: true});
      }
      //  分理处
      if (!this.lsActive) {
        that.map = new AMap.Map("container",{resizeEnable: true});
      }
      // that.map.clearMap(); // 清除地图覆盖物
      //构建点坐标  设置点标记的文本标签
      var lnglats = this.flc;
      // console.log(lnglats)
      // 添加一些分布不均的点到地图上,地图上添加三个点标记,作为参照
       var infoWindow = new AMap.InfoWindow({offset: new AMap.Pixel(0, -10)});
      for (var i = 0, marker; i < lnglats.length; i++) {
        let markers =Array.from([lnglats[i].lng,lnglats[i].lat])
        var marker = new AMap.Marker({
            position: markers,
            map: that.map
        });
        // let tel=lnglats[i].tel;
        marker.content =  lnglats[i].name+"<a id='cell' onclick='Phone(window)' style='color: #1d9beb;'>"+lnglats[i].tel +" </a>"+  (lnglats[i].address==null?" ":lnglats[i].address);
        marker.on('click', markerClick);
        marker.emit('click', {target: marker});
    }
     
    //  点击事件
    function markerClick(e) {
        infoWindow.setContent(e.target.content);
        infoWindow.open(that.map, e.target.getPosition());
       
    }
  

    that.map.setFitView();
    },
    // 点击弹出信息
   
  Phone (){
    let val =document.getElementById('cell').innerText;
    window.location.href = 'tel:'+val;
    // console.log(val,"222222")
   },
   
    // 分理处数据加载
    getqueryCityBranch() {
      queryCityBranch().then((res) => {
        // console.log(res.data, "分理处");
        if (res.data.success) {
          let arr = res.data.data;
          let arr2 = [],
            obj = {};
          for (let i = 0; i < arr.length; i++) {
            if (arr[i].lat && arr[i].lng) {
              if (
                arr[i].lat <= 90 &&
                arr[i].lat >= 0 &&
                arr[i].lng <= 180 &&
                arr[i].lng >= 0
              ) {
                // obj.position = [arr[i].lng, arr[i].lat];
                this.flc.push(
                  arr[i]
                );
              }
              // console.log(obj)
              // this.flc.push(obj);
            }
          }
          // console.log(this.flc, "flc分理处");
          this.loadmap(); //加载地图和相关组件
        }
      });
    },
    getqueryAreaBr() {
      queryAreaBr().then((res) => {
        // console.log(res.data, "分公司");
        if (res.data.success) {
          let arr = res.data.data;
          let arr2 = [],
            obj = {};
          for (let i = 0; i < arr.length; i++) {
            if (arr[i].lat && arr[i].lng) {
              if (
                arr[i].lat <= 90 &&
                arr[i].lat >= 0 &&
                arr[i].lng <= 180 &&
                arr[i].lng >= 0
              ) {
                this.flc.push(
                 arr[i]
                );
              }
            }
          }
          // console.log(this.flc, "分公司flc");
          this.loadmap(); //加载地图和相关组件
        }
      });
    },
    //  分公司加载
  },

  created() {},
  mounted() {
    this.getqueryAreaBr();
    let _this = this;
    // console.log(this)
    // window.Close = _this.Close;
    window.Phone=_this.Phone;
    // _this.Phone();
    console.log(window)
  },
};
</script>
<style  lang="less" scoped >
html,
body,
.mapmain {
  width: 100%;
  height: 100%;
}
#container {
  width: 100%;
  height: calc(100% - 2.5rem);
  overflow-y: scroll;
}
.map_text {
  width: 3rem;
  height: 500px;
  /* position: absolute; left: 46px; top: 146px; */
  background: white;
}
#container.amap-icon img {
  width: 25px;
  height: 34px;
}
#pickerBox {
  margin: 0.5rem 0;
  // width: 300px;
  height: 30px;
  line-height: 30px;
  position: relative;
  font-size: 14px;
}
#pickerInput {
  // width: 178px;
  height: 24px;
  border: 1px solid #ccc;
  border-radius: 5px;
  padding: 0 5px;
  position: absolute;
}
.myorder_active {
  width: 100%;
  height: 2.5rem;
  color: black;
  background: white;
  border: 1px solid #ededed;
}
.disActive {
  width: 100%;
  height: 2.5rem;
  background: #1d9beb;
  border: 1px solid #1d9beb;
  color: #fff;
}
.callPhone{
  background: aqua;
   color:  #1d9beb;
}
</style>
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
在使用高德地图API和Vue3实现自定义弹窗样式时,可以参考以下步骤: 1. 首先,初始化地图弹窗实例,并设置isCustom为true,表示使用自定义窗体。可以使用AMap.InfoWindow类来创建地图弹窗实例,并设置偏移量等属性。\[1\] 2. 在处理地图标记物点击事件时,可以通过获取点击的标记物对象,设置动画效果,并获取相应的内容。可以使用AMap.InfoWindow的setContent方法设置弹窗内容,然后使用open方法打开弹窗。\[1\] 3. 可以参考高德地图官方提供的demo样式,该demo展示了自定义弹窗的样式。可以在官方demo中查看代码和样式,以便参考和使用。\[2\] 4. 高德地图官网还提供了自定义弹窗内容的例子,使用了Dom操作的方式来实现。可以使用Vue的全局API中的Vue.extend方法来创建一个Vue子类构造器,然后通过实例化该构造器来创建一个Vue对象,类似于Dom中的DocumentFragment接口。这样可以使用Vue的方式来实现自定义弹窗的Dom操作。\[3\] 综上所述,你可以使用高德地图API和Vue3来实现自定义弹窗样式。可以参考高德地图官方提供的demo和文档,根据自己的需求进行相应的代码编写和样式设计。 #### 引用[.reference_title] - *1* *3* [高德地图自定义弹窗内容](https://blog.csdn.net/fredricen/article/details/106172766)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^control,239^v3^insert_chatgpt"}} ] [.reference_item] - *2* [VUE 高德自定义弹窗样式不生效?(AMap.InfoWindow弹窗样式问题)](https://blog.csdn.net/weixin_39921970/article/details/120744647)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^control,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值