vue-openlayers实现地图坐标弹框效果


Posted in Javascript onSeptember 24, 2020

本文实例为大家分享了vue-openlayers实现地图坐标弹框的具体代码,供大家参考,具体内容如下

openlayers

这个效果是点击地图,弹出坐标信息。

vue-openlayers实现地图坐标弹框效果

点击地图边缘时,底图会跟着移动,使弹窗能完整显示出来。

<template>
 <div class="vm">
  <h2 class="h-title">弹窗 popup</h2>
  <div id="map" class="map-x"></div>
  
  <!-- 弹窗元素 -->
  <div
   class="popup"
   ref="popup"
   v-show="currentCoordinate"
  >
   <span class="icon-close" @click="closePopup">✖</span>
   <div class="content">{{currentCoordinate}}</div>
  </div>
 </div>
</template>
 
<script>
import 'ol/ol.css'
import { Map, View } from 'ol'
import Tile from 'ol/layer/Tile'
import OSM from 'ol/source/OSM'
import { toStringHDMS } from 'ol/coordinate'
import { toLonLat } from 'ol/proj'
import Overlay from 'ol/Overlay'
 
export default {
 name: 'Popup',
 data () {
  return {
   map: null,
   currentCoordinate: null, // 弹窗坐标数据
   overlay: null
  }
 },
 methods: {
  initMap () {
   // 弹窗
   this.overlay = new Overlay({
    element: this.$refs.popup, // 弹窗标签,在html里
    autoPan: true, // 如果弹窗在底图边缘时,底图会移动
    autoPanAnimation: { // 底图移动动画
     duration: 250
    }
   })
 
   // 实例化地图
   this.map = new Map({
    target: 'map',
    layers: [
     new Tile({
      source: new OSM() // 使用OSM底图
     })
    ],
    overlays: [this.overlay], // 把弹窗加入地图
    view: new View({
     center: [-27118403.38733027, 4852488.79124965], // 北京坐标
     zoom: 12 // 地图缩放级别(打开页面时默认级别)
    })
   })
   this.mapClick() // 初始化地图成功后,给地图添加点击事件
  },
  mapClick () { // 地图点击事件
   // 通过 map.on() 监听,singleclick 是单击的意思。也可以用 click 代替 singleclick。
   this.map.on('singleclick', evt => {
    const coordinate = evt.coordinate // 获取坐标
    const hdms = toStringHDMS(toLonLat(coordinate)) // 转换坐标格式
    
    this.currentCoordinate = hdms // 保存坐标点
 
    setTimeout(() => {
     // 设置弹窗位置
     // 这里要设置定时器,不然弹窗首次出现,底图会跑偏
     this.overlay.setPosition(coordinate)
    }, 0)
    
 
   })
  },
  // 关闭弹窗
  closePopup () {
   // 把弹窗位置设置为undefined,并清空坐标数据
   this.overlay.setPosition(undefined)
   this.currentCoordinate = null
  }
 },
 mounted () {
  this.initMap()
 }
}
</script>
 
<style lang="scss" scoped>
 /* 弹窗样式 */
 .popup {
  min-width: 280px;
  position: relative;
  background: #fff;
  padding: 8px 16px;
  display: flex;
  flex-direction: column;
  transform: translate(-50%, calc(-100% - 12px));
 
  /* 弹窗下方的小三角形 */
  &::after {
   display: block;
   content: '';
   width: 0;
   height: 0;
   position: absolute;
   border: 12px solid transparent;
   border-top-color: #fff;
   bottom: -23px;
   left: 50%;
   transform: translateX(-50%);
  }
 }
 /* 关闭弹窗按钮 */
 .icon-close {
  cursor: pointer;
  align-self: flex-end;
  margin-bottom: 10px;
 }
</style>

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。 

Javascript 相关文章推荐
node.js中RPC(远程过程调用)的实现原理介绍
Dec 05 Javascript
js实现iframe框架取值的方法(兼容IE,firefox,chrome等)
Nov 26 Javascript
JavaScript实现弹出模态窗体并接受传值的方法
Feb 12 Javascript
jQuery插件WebUploader实现文件上传
Nov 07 Javascript
JavaScript使用类似break机制中断forEach循环的方法
Nov 13 Javascript
three.js搭建室内场景教程
Dec 30 Javascript
详解实现一个通用的“划词高亮”在线笔记功能
Apr 23 Javascript
在React中写一个Animation组件为组件进入和离开加上动画/过度效果
Jun 24 Javascript
小程序实现左滑删除效果
Jul 25 Javascript
js实现表单项的全选、反选及删除操作示例
Jun 05 Javascript
JS简易计算器实例讲解
Jun 30 Javascript
vue接口请求加密实例
Aug 11 Javascript
vue集成openlayers加载geojson并实现点击弹窗教程
Sep 24 #Javascript
Vue+Openlayers自定义轨迹动画
Sep 24 #Javascript
vue使用openlayers实现移动点动画
Sep 24 #Javascript
Openlayers实现点闪烁扩散效果
Sep 24 #Javascript
基于Ionic3实现选项卡切换并重新加载echarts
Sep 24 #Javascript
vue3.0生命周期的示例代码
Sep 24 #Javascript
js 将多个对象合并成一个对象 assign方法的实现
Sep 24 #Javascript
You might like
多文件上传的例子
2006/10/09 PHP
phpmyadmin打开很慢的解决方法
2014/04/21 PHP
PHP实现的方程求解示例分析
2016/11/11 PHP
PHP命名空间与自动加载类详解
2018/09/04 PHP
jquery 防止表单重复提交代码
2010/01/21 Javascript
jQuery Ajax异步处理Json数据详解
2013/11/05 Javascript
javascript从右边截取指定字符串的三种实现方法
2013/11/29 Javascript
js对table的td进行相同内容合并示例详解
2013/12/27 Javascript
用jquery模仿的a的title属性的例子
2014/10/22 Javascript
JavaScript返回0-1之间随机数的方法
2015/04/06 Javascript
jquery实现的蓝色二级导航条效果代码
2015/08/24 Javascript
js获取当前时间(昨天、今天、明天)
2016/11/23 Javascript
纯JS实现轮播图
2017/02/22 Javascript
原生JS实现圆环拖拽效果
2017/04/07 Javascript
JSON对象转化为字符串详解
2017/08/11 Javascript
利用three.js画一个3D立体的正方体示例代码
2017/11/19 Javascript
vue插件开发之使用pdf.js实现手机端在线预览pdf文档的方法
2018/07/12 Javascript
vue实现记事本功能
2019/06/26 Javascript
[01:14:30]TNC vs VG 2019国际邀请赛淘汰赛 胜者组赛BO3 第二场 8.20.mp4
2019/08/22 DOTA
[08:06]DOTA2-DPC中国联赛 正赛 PSG.LGD vs Elephant 选手采访
2021/03/11 DOTA
python实现跨文件全局变量的方法
2014/07/07 Python
解决pycharm界面不能显示中文的问题
2018/05/23 Python
python3的url编码和解码,自定义gbk、utf-8的例子
2019/08/22 Python
使用python实现时间序列白噪声检验方式
2020/06/03 Python
Django Admin 上传文件到七牛云的示例代码
2020/06/20 Python
python实现批处理文件
2020/07/28 Python
里程积分管理买卖交换平台:Points.com
2017/01/13 全球购物
一套.net面试题及答案
2016/11/02 面试题
小学运动会表扬稿
2014/01/19 职场文书
测试工程师职业规划书
2014/02/06 职场文书
2014庆六一活动方案
2014/03/02 职场文书
继承公证书格式
2015/01/26 职场文书
出纳岗位职责范本
2015/03/31 职场文书
新生儿未入户证明
2015/06/23 职场文书
广播稿:校园广播稿范文
2019/04/17 职场文书
Vue + iView实现Excel上传功能的完整代码
2021/06/22 Vue.js