IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 游戏开发 -> vue实现高德地图模糊搜索+筛选条件+定位+信息窗(完整案例) -> 正文阅读

[游戏开发]vue实现高德地图模糊搜索+筛选条件+定位+信息窗(完整案例)

vue实现高德地图模糊搜索+筛选条件+定位+信息窗

vue实现高德地图模糊搜索+筛选条件+定位+信息窗(完整案例)

先npm安装高德地图
npm i @amap/amap-jsapi-loader --save

<template>
  <div class="StationMap">
    <van-nav-bar title="场站地图" fixed placeholder safe-area-inset-top left-text="返回" left-arrow @click-left="$router.goBack()"/>
    <div class="content-header">
      <div class="van-search-box">
        <van-search v-model="searchValue" placeholder="请输入场站名称" @search="onSearch"></van-search>
      </div>
      <van-dropdown-menu>
        <van-dropdown-item v-model="dropdownValue" :options="dropdownOption"  @change="dropdownChange"/>
      </van-dropdown-menu>
    </div>
    <ul class="searchData" v-show="searchDataShow">
      <li class="van-cell" v-for="(item, i) in searchData" :key="i" @click="searchDataClick(item)">{{item.content}}</li>
    </ul>

    <div id="container"></div>
  </div>
</template>

<script>
import AMapLoader from '@amap/amap-jsapi-loader';

export default {
  name: "StationMap",
  computed: {
    searchData () {
      let searchVal = '';//搜索后的数据
      if (this.searchValue) {
        searchVal = this.mapData.filter(item => {
          return [Object.keys(item)[2]].some(key => {
            // 搜索所有的内容
            return String(item[key]).toLowerCase().indexOf(this.searchValue.toLowerCase()) > -1;
          })
        })
        this.searchDataShow = true;
        return searchVal;
      }
    }
  },
  watch: {
    searchDataShow () {
      if ((this.searchDataShow) && (this.searchValue === this.searchDataClickItem)) this.searchDataShow = false
    }
  },
  data() {
    return {
      map: null,
      searchDataShow: false,
      searchDataClickItem: "", // 点击之后的值
      mapData: [
        {
          lng: "106.15",
          lat: "30.02",
          content: "a合川"
        },
        {
          lng: "106.16",
          lat: "29.18",
          content: "b江津"
        },
        {
          lng: "107.05",
          lat: "29.10",
          content: "c南川"
        },
      ],
      searchValue: "", // 搜索的值

      dropdownValue: 1,
      dropdownOption: [
        {text: '项目1', value: 1},
        {text: '项目2', value: 2},
      ],
    }
  },
  methods: {
    dropdownChange (val) {
      this.searchValue = "";
    },
    // 搜索按钮, 键盘Enter触发
    onSearch(val) {
      this.mapData.forEach(item => {
        if (item.content === val) {
          this.searchDataClick(item)
        }
      })
    },
    // 点击模糊搜索列表 或 弹出信息窗并设置中心位置
    searchDataClick (item) {
      this.searchValue = item.content;
      this.searchDataShow = false;
      this.searchDataClickItem = item.content;

      // 1.信息窗的偏移位
      let infoWindow = new AMap.InfoWindow({offset: new AMap.Pixel(0, -30)});
      // 2.获取搜索结果的位置
      let position = [item.lng, item.lat]
      // 3.设置信息窗的内容
      infoWindow.setContent(item.content);
      // 4.将 搜索结果的位置 设置为 中心点
      this.map.setCenter(position)
      // 5.打开信息窗
      infoWindow.open(this.map, position);
    },
    // 高德地图
    initMap() {
      AMapLoader.load({
        key: "4a9b8d4819c66a63a4b5544397510c59", // 申请好的开发者Key
      }).then(AMap => {
        this.map = new AMap.Map("container", {
          resizeEnable: true,
        });
        let lnglats = [];
        for (const i in this.mapData) {
          lnglats.push([this.mapData[i].lng, this.mapData[i].lat])
        }
        for (let i = 0; i < this.mapData.length; i++) {
          let marker = new AMap.Marker({
            position: lnglats[i],
            map: this.map
          });
          marker.content = this.mapData[i].content;
          marker.on('click', this.markerClick);
          marker.emit('click', {target: marker});
        }
        this.map.setFitView();
      }).catch(err => {
        console.log(err);
      })
    },
    markerClick (e) {
      let infoWindow = new AMap.InfoWindow({offset: new AMap.Pixel(0, -30)});
      infoWindow.setContent(e.target.content);
      infoWindow.open(this.map, e.target.getPosition());
    }
  },
  mounted() {
    //DOM初始化完成进行地图初始化
    this.initMap();
  }
}
</script>

<style lang="scss">
.StationMap {
  .content-header {
    width: 100%;
    position: fixed;
    z-index: 999;
    display: flex;
    .van-search-box{
      flex: 1;
      .van-search {
        padding: 0;
        .van-cell {
          line-height: 40px;
          padding: 0;
        }
        .van-icon-clear{
          padding-right: 20px;
        }
      }
    }
    .van-dropdown-menu {
      flex: 1;
      //margin-left: 10px;
      border-left: 1px solid #e8e8ef;
      .van-dropdown-menu__bar {
        height: 40px;
        background-color: #f7f8fa;
        box-shadow: none;
      }
    }
  }
  .searchData {
    position: fixed;
    top: 86px;
    right: 0;
    left: 0;
    z-index: 998;
    overflow: hidden;
    background-color: #fff;
  }
  #container {
    width: 100%;
    height: 100vh;
  }
}
</style>

结果
在这里插入图片描述

  游戏开发 最新文章
6、英飞凌-AURIX-TC3XX: PWM实验之使用 GT
泛型自动装箱
CubeMax添加Rtthread操作系统 组件STM32F10
python多线程编程:如何优雅地关闭线程
数据类型隐式转换导致的阻塞
WebAPi实现多文件上传,并附带参数
from origin ‘null‘ has been blocked by
UE4 蓝图调用C++函数(附带项目工程)
Unity学习笔记(一)结构体的简单理解与应用
【Memory As a Programming Concept in C a
上一篇文章      下一篇文章      查看所有文章
加:2022-03-30 18:59:49  更:2022-03-30 19:02:11 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/23 19:59:31-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码