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 相关文章推荐
让广告代码不再影响你的网页加载速度
Jul 07 Javascript
javascript中的循环语句for语句深入理解
Apr 04 Javascript
js读取json的两种常用方法示例介绍
Oct 19 Javascript
node.js中的http.createServer方法使用说明
Dec 14 Javascript
详解JavaScript编程中的数组结构
Oct 24 Javascript
javascript倒计时效果实现
Nov 12 Javascript
JavaScript转换与解析JSON方法实例详解
Nov 24 Javascript
js实现拖拽效果(构造函数)
Dec 14 Javascript
JavaScript_object基础入门(必看篇)
Jun 13 Javascript
浅谈ECMAScript6新特性之let、const
Aug 02 Javascript
记一次webapck4 配置文件无效的解决历程
Sep 19 Javascript
vue+axios全局添加请求头和参数操作
Jul 24 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
php通过获取头信息判断图片类型的方法
2015/06/26 PHP
PHP基于yii框架实现生成ICO图标
2015/11/13 PHP
PHP实现微信模拟登陆并给用户发送消息的方法【文字,图片,图文】
2017/06/29 PHP
基于thinkphp6.0的success、error实现方法
2019/11/05 PHP
JS中获取数据库中的值的方法
2013/07/14 Javascript
jquery增加时编辑jqGrid(实例代码)
2013/11/08 Javascript
javascript页面渲染速度测试脚本分享
2014/04/15 Javascript
原生js和jquery实现图片轮播淡入淡出效果
2015/04/23 Javascript
JS与jQuery遍历Table所有单元格内容的方法
2015/12/07 Javascript
简单的jQuery banner图片轮播实例代码
2016/03/04 Javascript
Nodejs之http的表单提交
2017/07/07 NodeJs
JS加密插件CryptoJS实现的Base64加密示例
2020/08/16 Javascript
layer 刷新某个页面的实现方法
2019/09/05 Javascript
Python挑选文件夹里宽大于300图片的方法
2015/03/05 Python
python用装饰器自动注册Tornado路由详解
2017/02/14 Python
python中字符串类型json操作的注意事项
2017/05/02 Python
linux环境下python中MySQLdb模块的安装方法
2017/06/16 Python
Python中的Django基本命令实例详解
2018/07/15 Python
对python自动生成接口测试的示例讲解
2018/11/30 Python
opencv转换颜色空间更改图片背景
2019/08/20 Python
python 多进程队列数据处理详解
2019/12/23 Python
python右对齐的实例方法
2020/07/05 Python
如何利用Python 进行边缘检测
2020/10/14 Python
python实现跨年表白神器--你值得拥有
2021/01/04 Python
Roxy美国官网:澳大利亚冲浪、滑雪健身品牌
2016/07/30 全球购物
澳大利亚冒险体验:Adrenaline(跳伞、V8赛车、热气球等)
2017/09/18 全球购物
个人生活学习自我评价范文
2013/11/26 职场文书
年度考核自我评价
2014/01/25 职场文书
党员批评与自我批评
2014/02/12 职场文书
善意的谎言事例
2014/02/15 职场文书
教师求职自荐信
2014/03/09 职场文书
审计班子对照检查材料
2014/08/27 职场文书
办公室文员岗位职责
2015/02/04 职场文书
坎儿井导游词
2015/02/09 职场文书
教师教育教学随笔
2015/08/15 职场文书
JS实现简单控制视频播放倍速的实例代码
2021/04/18 Javascript