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 相关文章推荐
offsetParent 算法分析
Apr 05 Javascript
一些相见恨晚的 JavaScript 技巧
Apr 25 Javascript
jQuery插件-jRating评分插件源码分析及使用方法
Dec 28 Javascript
jQuery选择器中含有空格的使用示例及注意事项
Aug 25 Javascript
jquery中focus()函数实现当对象获得焦点后自动把光标移到内容最后
Sep 29 Javascript
JavaScript 异常处理 详解
Feb 06 Javascript
浅谈js键盘事件全面控制
Dec 01 Javascript
纯原生js实现table表格的增删
Jan 05 Javascript
详解微信小程序 template添加绑定事件
Jun 23 Javascript
JavaScript之filter_动力节点Java学院整理
Jun 28 Javascript
vue 组件内获取actions的response方式
Nov 08 Javascript
vue-router定义元信息meta操作
Dec 07 Vue.js
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
yii框架通过控制台命令创建定时任务示例
2014/04/30 PHP
PHP中通过fopen()函数访问远程文件示例
2014/11/18 PHP
php实现的xml操作类
2016/01/15 PHP
CodeIgniter常用知识点小结
2016/05/26 PHP
jQuery 相关控件的事件操作分解
2009/08/03 Javascript
fancybox1.3.1 基于Jquery的插件在IE中图片显示问题
2010/10/01 Javascript
自己动手实现jQuery Callbacks完整功能代码详解
2013/11/25 Javascript
ztree获取当前选中节点子节点id集合的方法
2015/02/12 Javascript
JavaScript中停止执行setInterval和setTimeout事件的方法
2015/05/14 Javascript
基于javascript实现简单计算器功能
2016/01/03 Javascript
jquery trigger函数执行两次的解决方法
2016/02/29 Javascript
Vue.js中数组变动的检测详解
2016/10/12 Javascript
微信小程序中实现一对多发消息详解及实例代码
2017/02/14 Javascript
jQuery插件HighCharts绘制2D圆环图效果示例【附demo源码下载】
2017/03/09 Javascript
ES6入门教程之Iterator与for...of循环详解
2017/05/17 Javascript
Nodejs搭建wss服务器教程
2017/05/24 NodeJs
javacript replace 正则取字符串中的值并替换【推荐】
2018/09/13 Javascript
详解element-ui中form验证杂记
2019/03/04 Javascript
JS中的函数与对象的创建方式
2019/05/12 Javascript
实用的Vue开发技巧
2019/05/30 Javascript
小程序根据手机机型设置自定义底部导航距离
2019/06/04 Javascript
JavaScript实现打砖块游戏
2020/02/25 Javascript
javascript中contains是否包含功能实现代码(扩展字符、数组、dom)
2020/04/07 Javascript
[01:02:09]Liquid vs TNC 2019国际邀请赛淘汰赛 胜者组 BO3 第二场 8.21
2020/07/19 DOTA
Python抓取百度查询结果的方法
2015/07/08 Python
python通过socket实现多个连接并实现ssh功能详解
2017/11/08 Python
python实现手机销售管理系统
2019/03/19 Python
Python零基础入门学习之输入与输出
2019/04/03 Python
Python+OpenCV 实现图片无损旋转90°且无黑边
2019/12/12 Python
Python预测2020高考分数和录取情况
2020/07/08 Python
.NET笔试题(20个问题)
2016/02/02 面试题
云冈石窟导游词
2015/02/04 职场文书
英文慰问信
2015/02/14 职场文书
2015年大学生入党自荐书
2015/03/24 职场文书
《家庭教育》读后感3篇
2019/12/18 职场文书
红灯733-1型14管5波段半导体收音机
2021/04/22 无线电