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 相关文章推荐
Mootools 1.2教程 滑动效果(Slide)
Sep 15 Javascript
js从10种颜色中随机取色实现每次取出不同的颜色
Oct 23 Javascript
javascript 密码框防止用户粘贴和复制的实现代码
Feb 17 Javascript
用jquery模仿的a的title属性的例子
Oct 22 Javascript
推荐10个2014年最佳的jQuery视频插件
Nov 12 Javascript
JavaScript中的公有、私有、特权和静态成员用法分析
Nov 20 Javascript
Js 正则表达式知识汇总
Dec 02 Javascript
jQuery事件绑定用法详解(附bind和live的区别)
Jan 19 Javascript
用jQuery实现可输入多选下拉组合框实例代码
Jan 18 Javascript
AngularJs上传前预览图片的实例代码
Jan 20 Javascript
JavaScript学习笔记之图片库案例分析
Jan 08 Javascript
JS前端知识点总结之内置对象,日期对象和定时器相关操作
Jul 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构造方法中析构方法在继承中的表现
2016/04/12 PHP
使用js写的一个简易的投票
2013/11/27 Javascript
jquery删除table当前行的实例代码
2016/10/07 Javascript
JavaScript递归操作实例浅析
2016/10/31 Javascript
Bootstrap基本组件学习笔记之导航(10)
2016/12/07 Javascript
学习jQuery中的noConflict()用法
2018/09/28 jQuery
React优化子组件render的使用
2019/05/12 Javascript
keep-alive不能缓存多层级路由菜单问题解决
2020/03/10 Javascript
vue-router 2.0 跳转之router.push()用法说明
2020/08/12 Javascript
tornado 多进程模式解析
2018/01/15 Python
django用户注册、登录、注销和用户扩展的示例
2018/03/19 Python
在python中实现对list求和及求积
2018/11/14 Python
python实现手机销售管理系统
2019/03/19 Python
对python特殊函数 __call__()的使用详解
2019/07/02 Python
详解Python 中sys.stdin.readline()的用法
2019/09/12 Python
keras 两种训练模型方式详解fit和fit_generator(节省内存)
2020/07/03 Python
matplotlib源码解析标题实现(窗口标题,标题,子图标题不同之间的差异)
2021/02/22 Python
解决Pyinstaller打包软件失败的一个坑
2021/03/04 Python
CSS3 Flexbox中flex-shrink属性的用法示例介绍
2013/12/30 HTML / CSS
html5 桌面提醒:Notifycations应用介绍
2012/11/27 HTML / CSS
HTML5中5个简单实用的API(第二篇,含全屏、可见性、拍照、预加载、电池状态)
2014/05/07 HTML / CSS
美国宠物商店:Wag.com
2016/10/25 全球购物
Baracuta官方网站:Harrington夹克,G9,G4,G10等
2018/03/06 全球购物
We Fashion荷兰:一家国际时装公司
2018/04/18 全球购物
传统软件工程与面向对象的软件工程有什么区别
2012/05/31 面试题
Python里面如何拷贝一个对象
2014/02/17 面试题
计算机专业应届毕业生自荐信
2013/09/26 职场文书
租房协议书怎么写
2014/04/10 职场文书
创文明城市标语
2014/06/16 职场文书
地球一小时宣传标语
2014/06/24 职场文书
老公保证书怎么写
2015/02/26 职场文书
毛主席纪念堂观后感
2015/06/17 职场文书
小米11和iphone12哪个值得买?小米11对比iphone12评测
2021/04/21 数码科技
告别网页搜索!教你用python实现一款属于自己的翻译词典软件
2021/06/03 Python
SQL基础的查询语句
2021/11/11 MySQL
面试分析分布式架构Redis热点key大Value解决方案
2022/03/13 Redis