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 相关文章推荐
用js脚本控制asp.net下treeview的NodeCheck的实现代码
Mar 02 Javascript
获得所有表单值的JQuery实现代码[IE暂不支持]
May 24 Javascript
JS实现随机乱撞彩色圆球特效的方法
May 05 Javascript
jQuery 1.9.1源码分析系列(十三)之位置大小操作
Dec 02 Javascript
JS HTML5拖拽上传图片预览
Jul 18 Javascript
微信小程序中多个页面传参通信的学习与实践
May 05 Javascript
cocos creator Touch事件应用(触控选择多个子节点的实例)
Sep 10 Javascript
js精确的加减乘除实例
Nov 14 Javascript
layDate日期控件使用方法详解
Nov 15 Javascript
Node.js Stream ondata触发时机与顺序的探索
Mar 08 Javascript
vue路由 遍历生成复数router-link的例子
Oct 30 Javascript
js实现百度登录窗口拖拽效果
Mar 19 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
thinkphp实现like模糊查询实例
2014/10/29 PHP
php设计模式之策略模式实例分析【星际争霸游戏案例】
2020/03/26 PHP
Js+XML 操作
2006/09/20 Javascript
javascript转换字符串为dom对象(字符串动态创建dom)
2010/05/10 Javascript
基于jQuery制作迷你背词汇工具
2010/07/27 Javascript
javascript学习之闭包分析
2010/12/02 Javascript
javascript结合fileReader 实现上传图片
2015/01/30 Javascript
Javascript毫秒数用法实例
2015/02/05 Javascript
JavaScript实现下拉列表框数据增加、删除、上下排序的方法
2015/08/11 Javascript
JS中的==运算: [''] == false —&gt;true
2016/07/24 Javascript
Vue2学习笔记之请求数据交互vue-resource
2017/02/23 Javascript
jQuery插件zTree实现的基本树与节点获取操作示例
2017/03/08 Javascript
vuex中的 mapState,mapGetters,mapActions,mapMutations 的使用
2018/04/13 Javascript
JS同步、异步、延迟加载的方法
2018/05/05 Javascript
浅析JS中回调函数及用法
2018/07/25 Javascript
解决JavaScript中0.1+0.2不等于0.3问题
2018/10/23 Javascript
微信小程序实现底部导航
2018/11/05 Javascript
Vue 幸运大转盘实现思路详解
2019/05/06 Javascript
详解vue 在移动端体验上的优化解决方案
2019/05/20 Javascript
Vue 解决路由过渡动画抖动问题(实例详解)
2020/01/05 Javascript
jQuery使用jsonp实现百度搜索的示例代码
2020/07/08 jQuery
VSCode下好用的Python插件及配置
2018/04/06 Python
Python中分支语句与循环语句实例详解
2018/09/13 Python
python调用摄像头拍摄数据集
2019/06/01 Python
在tensorflow中设置使用某一块GPU、多GPU、CPU的操作
2020/02/07 Python
python接入支付宝的实例操作
2020/07/20 Python
如何使用Python自动生成报表并以邮件发送
2020/10/15 Python
Fashion Eyewear美国:英国线上设计师眼镜和太阳镜的零售商
2016/08/15 全球购物
Perry Ellis官网:美国男士品味服装
2016/12/09 全球购物
《湘夫人》教学反思
2014/02/21 职场文书
利群广告词
2014/03/20 职场文书
安全教育演讲稿
2014/05/09 职场文书
个人授权委托书格式
2014/08/30 职场文书
受伤赔偿协议书
2014/09/24 职场文书
个人自荐书怎么写
2015/03/26 职场文书
Go gorilla securecookie库的安装使用详解
2022/08/14 Golang