场景
Leaflet快速入门与加载OSM显示地图:
https://blog.csdn.net/BADAO_LIUMANG_QIZHI/article/details/122290880
在上面的基础上,怎样使用插件实现地图侧边栏效果如下
注:
博客:
https://blog.csdn.net/badao_liumang_qizhi
关注公众号
霸道的程序猿
获取编程相关电子书、教程推送与免费下载。
实现
1、插件地址
https://github.com/turbo87/leaflet-sidebar/
2、下载源码,然后引入需要的L.Control.Sidebar.js文件
3、css文件不再单独引入,直接放在html中
.leaflet-sidebar { position: absolute; height: 100%; -webkit-box-sizing: border-box; -moz-box-sizing: border-box; box-sizing: border-box; padding: 10px; z-index: 2000; } .leaflet-sidebar.left { left: -500px; transition: left 0.5s, width 0.5s; padding-right: 0; } .leaflet-sidebar.left.visible { left: 0; } .leaflet-sidebar.right { right: -500px; transition: right 0.5s, width 0.5s; padding-left: 0; } .leaflet-sidebar.right.visible { right: 0; } .leaflet-sidebar>.leaflet-control { height: 100%; 100%; overflow: auto; -webkit-overflow-scrolling: touch; -webkit-box-sizing: border-box; -moz-box-sizing: border-box; box-sizing: border-box; padding: 8px 24px; font-size: 1.1em; background: white; box-shadow: 0 1px 7px rgba(0, 0, 0, 0.65); -webkit-border-radius: 4px; border-radius: 4px; } .leaflet-touch .leaflet-sidebar>.leaflet-control { box-shadow: none; border: 2px solid rgba(0, 0, 0, 0.2); background-clip: padding-box; } @media (max- 767px) { .leaflet-sidebar { 100%; padding: 0; } .leaflet-sidebar.left.visible~.leaflet-left { left: 100%; } .leaflet-sidebar.right.visible~.leaflet-right { right: 100%; } .leaflet-sidebar.left { left: -100%; } .leaflet-sidebar.left.visible { left: 0; } .leaflet-sidebar.right { right: -100%; } .leaflet-sidebar.right.visible { right: 0; } .leaflet-sidebar>.leaflet-control { box-shadow: none; -webkit-border-radius: 0; border-radius: 0; } .leaflet-touch .leaflet-sidebar>.leaflet-control { border: 0; } } @media (min- 768px) and (max- 991px) { .leaflet-sidebar { 305px; } .leaflet-sidebar.left.visible~.leaflet-left { left: 305px; } .leaflet-sidebar.right.visible~.leaflet-right { right: 305px; } } @media (min- 992px) and (max- 1199px) { .leaflet-sidebar { 390px; } .leaflet-sidebar.left.visible~.leaflet-left { left: 390px; } .leaflet-sidebar.right.visible~.leaflet-right { right: 390px; } } @media (min- 1200px) { .leaflet-sidebar { 460px; } .leaflet-sidebar.left.visible~.leaflet-left { left: 460px; } .leaflet-sidebar.right.visible~.leaflet-right { right: 460px; } } .leaflet-sidebar .close { position: absolute; right: 20px; top: 20px; 31px; height: 31px; color: #333; font-size: 25pt; line-height: 1em; text-align: center; background: white; -webkit-border-radius: 16px; border-radius: 16px; cursor: pointer; z-index: 8; } .leaflet-left { transition: left 0.5s; } .leaflet-right { transition: right 0.5s; }
4、除了显示地图的div之外,再添加侧边栏显示的内容
<!-- 侧边栏弹窗显示的内容 --> <div id="sidebar"> <h1>公众号</h1> <p>霸道的程序猿</p> <p><b>我的CSDN</b></p> <p></p> <ul> <li><a href="https://blog.csdn.net/BADAO_LIUMANG_QIZHI">霸道流氓气质</a></li> </ul> </div>
5、完整示例代码,注释见代码
<!doctype html> <html lang="en"> <head> <meta charset="UTF-8"> <title>leaflet实现侧边栏效果</title> <link rel="stylesheet" href="https://unpkg.com/leaflet@1.7.1/dist/leaflet.css" /> <style> html, body, #map { padding: 0; margin: 0; 100%; height: 100%; overflow: hidden; } .leaflet-sidebar { position: absolute; height: 100%; -webkit-box-sizing: border-box; -moz-box-sizing: border-box; box-sizing: border-box; padding: 10px; z-index: 2000; } .leaflet-sidebar.left { left: -500px; transition: left 0.5s, width 0.5s; padding-right: 0; } .leaflet-sidebar.left.visible { left: 0; } .leaflet-sidebar.right { right: -500px; transition: right 0.5s, width 0.5s; padding-left: 0; } .leaflet-sidebar.right.visible { right: 0; } .leaflet-sidebar>.leaflet-control { height: 100%; 100%; overflow: auto; -webkit-overflow-scrolling: touch; -webkit-box-sizing: border-box; -moz-box-sizing: border-box; box-sizing: border-box; padding: 8px 24px; font-size: 1.1em; background: white; box-shadow: 0 1px 7px rgba(0, 0, 0, 0.65); -webkit-border-radius: 4px; border-radius: 4px; } .leaflet-touch .leaflet-sidebar>.leaflet-control { box-shadow: none; border: 2px solid rgba(0, 0, 0, 0.2); background-clip: padding-box; } @media (max- 767px) { .leaflet-sidebar { 100%; padding: 0; } .leaflet-sidebar.left.visible~.leaflet-left { left: 100%; } .leaflet-sidebar.right.visible~.leaflet-right { right: 100%; } .leaflet-sidebar.left { left: -100%; } .leaflet-sidebar.left.visible { left: 0; } .leaflet-sidebar.right { right: -100%; } .leaflet-sidebar.right.visible { right: 0; } .leaflet-sidebar>.leaflet-control { box-shadow: none; -webkit-border-radius: 0; border-radius: 0; } .leaflet-touch .leaflet-sidebar>.leaflet-control { border: 0; } } @media (min- 768px) and (max- 991px) { .leaflet-sidebar { 305px; } .leaflet-sidebar.left.visible~.leaflet-left { left: 305px; } .leaflet-sidebar.right.visible~.leaflet-right { right: 305px; } } @media (min- 992px) and (max- 1199px) { .leaflet-sidebar { 390px; } .leaflet-sidebar.left.visible~.leaflet-left { left: 390px; } .leaflet-sidebar.right.visible~.leaflet-right { right: 390px; } } @media (min- 1200px) { .leaflet-sidebar { 460px; } .leaflet-sidebar.left.visible~.leaflet-left { left: 460px; } .leaflet-sidebar.right.visible~.leaflet-right { right: 460px; } } .leaflet-sidebar .close { position: absolute; right: 20px; top: 20px; 31px; height: 31px; color: #333; font-size: 25pt; line-height: 1em; text-align: center; background: white; -webkit-border-radius: 16px; border-radius: 16px; cursor: pointer; z-index: 8; } .leaflet-left { transition: left 0.5s; } .leaflet-right { transition: right 0.5s; } </style> </head> <body> <!-- 侧边栏弹窗显示的内容 --> <div id="sidebar"> <h1>公众号</h1> <p>霸道的程序猿</p> <p><b>我的CSDN</b></p> <p></p> <ul> <li><a href="https://blog.csdn.net/BADAO_LIUMANG_QIZHI">霸道流氓气质</a></li> </ul> </div> <div id="map"></div> <script type="text/javascript" src="https://unpkg.com/leaflet@1.7.1/dist/leaflet.js"></script> <script type="text/javascript" src="./js/L.Control.Sidebar.js"></script> <script type="text/javascript"> var map = L.map('map').setView([36.09, 120.35], 13); L.tileLayer('https://{s}.tile.openstreetmap.org/{z}/{x}/{y}.png', { attribution: '' }).addTo(map); //声明侧边栏组件并添加到地图 var sidebar = L.control.sidebar('sidebar', { closeButton: true, position: 'left' }); map.addControl(sidebar); //延时0.5秒后显示侧边栏 setTimeout(function () { sidebar.show(); }, 500); //添加一个标记并设置其点击事件,点击时显示侧边栏 var marker = L.marker([36.09, 120.35]).addTo(map).on('click', function () { sidebar.toggle(); }); //设置地图点击事件,侧边栏隐藏 map.on('click', function () { sidebar.hide(); }) //侧边栏显示时的事件 sidebar.on('show', function () { console.log('Sidebar will be visible.'); }); //侧边栏显示成功之后的事件 sidebar.on('shown', function () { console.log('Sidebar is visible.'); }); //隐藏侧边栏时的事件 sidebar.on('hide', function () { console.log('Sidebar will be hidden.'); }); //侧边栏隐藏成功后的事件 sidebar.on('hidden', function () { console.log('Sidebar is hidden.'); }); //侧边栏的关闭按钮的点击事件 L.DomEvent.on(sidebar.getCloseButton(), 'click', function () { console.log('Close button clicked.'); }); </script> </body> </html>