当前位置: 首页 > news >正文

地图可视化实践录:leaflet学习之右键菜单

本文在地图页面上实现右键菜单,并实现拾取坐标的事件。

背景

从前面的demo可以看到,经纬度需要自己找并输入,不是很方便。本文实现鼠标右键菜单功能,并实现拾取坐标的事件。

设计

  • 在地图页面上单击鼠标右键,弹出菜单,有若干功能项,根据功能项响应事件。
  • 读取当前鼠标所在经纬度,并显示。

实现

页面设计

右键菜单的css在<style></style>添加设置,具体如下:

/* 右键菜单样式 */.context-menu {position: absolute;z-index: 1000;background: white;border: 1px solid #ccc;border-radius: 5px;box-shadow: 2px 2px 5px rgba(0,0,0,0.2);padding: 0;display: none;width: 150px;transform: translate(-5px, -5px); /* 使菜单向左上方偏移 */}.context-menu ul {list-style: none;margin: 0;padding: 0;}.context-menu li {padding: 2px 15px;cursor: default; /* 菜单项也使用箭头光标 *//* border-bottom: 1px solid #eeee; */ /*不要横线*/transition: background 0.2s;font-size: 14px;}/* 分组分隔线 - 在第3项后添加较粗的分隔线 *//* .context-menu li:nth-child(3) {border-bottom: 2px solid #cccccc;}.context-menu li:nth-child(5) {border-bottom: 2px solid #cccccc;} */.context-menu li:last-child {border-bottom: none;}.context-menu li:hover {/* background: #efefef; */background: #f7f7f7;}

body中添加右键菜单代码:

       ....<button onclick="clearMap()">清除图层</button><!-- 右键菜单 --><div id="context-menu" class="context-menu"><ul><li data-action="r-show-coords">显示经纬度</li></ul></div></div>
</body>

其中,响应r-show-coords

响应事件

utils.js文件的showMap函数中设置右键菜单,并在click事件中添加菜单的事件处理。如下:

function showMap() {// ....// ------------ 右键事件 开始const contextMenu = document.getElementById('context-menu');let lastRClickEvt = null; // 改为保存事件对象mymap.on('contextmenu', function (e) {// / 阻止默认的右键菜单e.originalEvent.preventDefault();lastRClickEvt = e;// 显示自定义右键菜单contextMenu.style.display = 'block';contextMenu.style.left = (e.originalEvent.pageX - 3) + 'px';contextMenu.style.top = (e.originalEvent.pageY - 3) + 'px';}); // end of contextmenu// 单击事件  点击其他地方隐藏右键菜单mymap.on('click', function() {contextMenu.style.display = 'none';});// 处理菜单点击contextMenu.querySelectorAll('li').forEach(item => {item.addEventListener('click', function(e) {const action = this.getAttribute('data-action');handleRightClick(action, lastRClickEvt);contextMenu.style.display = 'none';});});// ------------ 右键事件 结束
}

其中,handleRightClick为具体事件命令的实现函数,当前实现功能如下:

// 右键具体命令实现
function handleRightClick(action, e) {if (!e || !e.latlng) return;var latlng = e.latlng.lng.toFixed(6) + "," + e.latlng.lat.toFixed(6)var zoom = mymap.getZoom()const output = document.getElementById('txtOutput');// 根据各命令响应switch(action) {case 'r-show-coords':output.value = `缩放等级: ${zoom} \r\n经纬度信息(经度, 纬度): ${latlng}`break;}
}

测试

在任意位置单击鼠标右键效果:
在这里插入图片描述

使用上述坐标定位效果:
在这里插入图片描述

小结

通过右键拾取坐标功能,极大方便采集不同位置的坐标。

代码

文中列出了主要的代码片段,另有相关的工程demo,已上传到github仓库。因不定时更新,代码不一定与文中严格对应,以代码仓库为准。如使用,请自行根据实际情况修改。

仓库地址:https://github.com/latelee/mapdemo 。

本文demo文件:100.综合示例.htmlutils.js,其它依赖组件文件。

http://www.dtcms.com/a/579397.html

相关文章:

  • 网站关键词优化教程上海高端网站建设服
  • 视频弹幕网站怎么做建设牌官方网站
  • arduino烧录esp32问题
  • 生产环境 cpu 飙高,如何排查
  • 网站建设技术是干嘛的网站建立步骤
  • 智能建站模版国内专业建站平台
  • app会替代网站吗建设营销型网站的原因
  • 深圳建站哪家专业建网站自己做服务器
  • 建购物网站需要多少钱建设银行网站怎么短信转账
  • 西安长安区网站优化地址网站布局英文
  • Linux实用操作
  • 网站域名免费注册深圳宝安房价
  • 如何搜索网站微信公众号平台登陆
  • 销售外包团队搜索关键词排名优化技术
  • 常见网站推广方式莱芜吧重汽怎么样
  • 网站维护怎么学视频制作软件手机版
  • 怎么看到网站开发时间永嘉高端网站建设效果
  • 怎么建一个网站卖东西咸宁有做网站的吗
  • 抚州做网站wordpress菜单页面未找到
  • 注册域名的网站有哪些有没有网站
  • 上海做网站的小公司有哪些网站接入支付宝需要网站备案吗
  • 商品网站开发需求表企业定制网站建设公司
  • 二手表网站2012版wordpress
  • 怎么做付款链接网站中国公路建设行业协会网站上
  • Redis缓存“防坑指南”:从“缓存穿透”到“分布式锁”,3个案例讲透实战用法
  • seo网站排名如何查看网站流量
  • 网站优化的基本思想百度发布信息怎么弄
  • 什么专业可以做网站编辑游戏软件开发培训
  • 北大荒建设集团有限公司网站求一个手机能看的2022
  • 免费建站并且绑定域名怎么在网上做外贸