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 相关文章推荐
Javascript 作用域使用说明
Aug 13 Javascript
javascript开发技术大全-第1章javascript概述
Jul 03 Javascript
在jQuery中 常用的选择器介绍
Apr 16 Javascript
使用jQuery实现的掷色子游戏动画效果
Mar 14 Javascript
微信小程序movable view移动图片和双指缩放实例代码
Aug 08 Javascript
JS实现下拉菜单列表与登录注册弹窗效果
Aug 10 Javascript
使用javascript做在线算法编程
May 25 Javascript
JavaScript函数节流和函数去抖知识点学习
Jul 31 Javascript
解决ng-repeat产生的ng-model中取不到值的问题
Oct 02 Javascript
使用puppeteer爬取网站并抓出404无效链接
Dec 20 Javascript
TypeScript中的方法重载详解
Apr 12 Javascript
解决vue路由name同名,路由重复的问题
Aug 05 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 strtotime 函数UNIX时间戳
2009/01/14 PHP
PHP中Date()时间日期函数的使用方法小结
2011/04/20 PHP
非常好用的Zend Framework分页类
2014/06/25 PHP
php中array_multisort对多维数组排序的方法
2020/06/21 PHP
PHP依赖注入原理与用法分析
2018/08/21 PHP
JavaScript立即执行函数的三种不同写法
2014/09/05 Javascript
JavaScript函数详解
2014/11/17 Javascript
限制上传文件大小和格式的jQuery插件实例
2015/01/24 Javascript
jQuery实现仿百度帖吧头部固定导航效果
2015/08/07 Javascript
javascript正则表达式之分组概念与用法实例
2016/06/16 Javascript
javascript insertAfter()定义与用法示例
2016/07/25 Javascript
jQuery.form.js插件不能解决连接超时(timeout)的原因分析及解决方法
2016/10/14 Javascript
Vue2.0父组件与子组件之间的事件发射与接收实例代码
2017/09/19 Javascript
angular4自定义组件详解
2017/09/28 Javascript
jQuery内容过滤选择器与子元素过滤选择器用法实例分析
2019/02/20 jQuery
js实现文字头像的生成代码
2020/03/07 Javascript
Nodejs 微信小程序消息推送的实现
2021/01/20 NodeJs
[01:55]TI9显影之尘系列 - Evil Geniuses
2019/08/22 DOTA
跟老齐学Python之传说中的函数编写条规
2014/10/11 Python
Python3安装Scrapy的方法步骤
2017/11/23 Python
django 按时间范围查询数据库实例代码
2018/02/11 Python
Python读取excel指定列生成指定sql脚本的方法
2018/11/28 Python
tensorflow中tf.slice和tf.gather切片函数的使用
2020/01/19 Python
python 实现批量图片识别并翻译
2020/11/02 Python
python实现企业微信定时发送文本消息的实例代码
2020/11/25 Python
自动化专业毕业生自荐信
2013/11/01 职场文书
甜品店的创业计划书范文
2014/01/02 职场文书
青年文明号事迹材料
2014/01/18 职场文书
大学生就业求职信
2014/06/12 职场文书
奥巴马当选演讲稿
2014/09/10 职场文书
销售会议开幕词
2015/01/28 职场文书
2015毕业寄语大全
2015/02/26 职场文书
会计稽核岗位职责
2015/04/13 职场文书
交通事故起诉书
2015/05/19 职场文书
2015年教务工作总结
2015/05/23 职场文书
2015暑假社会调查报告
2015/07/13 职场文书