带滚动条的传单上下文菜单
Leaflet contextmenu with scrollbar
我已将滚动条添加到传单地图中。我们在地图上右击就可以看到了。但我无法滚动上下文菜单列表。每当我尝试滚动上下文菜单列表时,它就会消失。所以首先,我需要右键单击地图以查看上下文菜单列表。然后,我想使用滚动条来检查列表中的所有项目。第一部分工作正常,但第二部分没有按我的意愿工作。这是我的代码,
var map,
cm,
ll = new L.LatLng(-36.852668, 174.762675),
ll2 = new L.LatLng(-36.86, 174.77);
map = L.map('map', {
center: ll,
zoom: 15,
contextmenu: true,
contextmenuWidth: 140,
contextmenuItems: [
{
text: 'Show coordinates'
},
{
text: 'Center map here'
},
'-',
{
text: 'Zoom in'
},
{
text: 'Zoom out'
},
{
text: 'A'
},
{
text: 'B'
},
{
text: 'C'
},
{
text: 'D'
},
{
text: 'E'
},
{
text: 'F'
}
]
});
L.tileLayer('http://{s}.tile.osm.org/{z}/{x}/{y}.png', {
attribution: '© <a href="http://osm.org/copyright">OpenStreetMap</a> contributors'
}).addTo(map);
L.marker(ll, {
contextmenu: true,
contextmenuItems: [{
text: 'Marker item',
index: 0
}, {
separator: true,
index: 1
}]
}).addTo(map);
L.marker(ll2, {
contextmenu: true,
contextmenuInheritItems: false,
contextmenuItems: [{
text: 'Marker item'
}]
}).addTo(map);
/* To make contextmenu scrollable */
.leaflet-contextmenu {
height: 80px;
overflow: auto;
}
<!doctype html>
<html>
<head>
<title>Leaflet Context Menu</title>
<link rel="stylesheet" href="https://unpkg.com/leaflet@1.0.2/dist/leaflet.css"/>
<link rel="stylesheet" href="https://cdn.jsdelivr.net/gh/aratcliffe/Leaflet.contextmenu/dist/leaflet.contextmenu.min.css"/>
</head>
<body>
<div id="map" style="position: absolute; top: 0; left: 0; width: 100%; height: 100%;"></div>
<script src="https://unpkg.com/leaflet@1.0.2/dist/leaflet.js"></script>
<script src="https://cdn.jsdelivr.net/gh/aratcliffe/Leaflet.contextmenu/dist/leaflet.contextmenu.min.js"></script>
</body>
</html>
提前致谢!
最后,我找到了自己的解决方案。问题出在 MouseEvent 中。每当我想放大时,都会触发地图的鼠标事件!因此,我为上下文菜单容器添加了监听器以启用和禁用滚动。这是我的解决方案,
var map,
cm,
ll = new L.LatLng(-36.852668, 174.762675),
ll2 = new L.LatLng(-36.86, 174.77);
map = L.map('map', {
center: ll,
zoom: 15,
contextmenu: true,
contextmenuWidth: 140,
contextmenuItems: [
{
text: 'Show coordinates'
},
{
text: 'Center map here'
},
'-',
{
text: 'Zoom in'
},
{
text: 'Zoom out'
},
{
text: 'A'
},
{
text: 'B'
},
{
text: 'C'
},
{
text: 'D'
},
{
text: 'E'
},
{
text: 'F'
}
]
});
L.tileLayer('http://{s}.tile.osm.org/{z}/{x}/{y}.png', {
attribution: '© <a href="http://osm.org/copyright">OpenStreetMap</a> contributors'
}).addTo(map);
L.marker(ll, {
contextmenu: true,
contextmenuItems: [{
text: 'Marker item',
index: 0
}, {
separator: true,
index: 1
}]
}).addTo(map);
L.marker(ll2, {
contextmenu: true,
contextmenuInheritItems: false,
contextmenuItems: [{
text: 'Marker item'
}]
}).addTo(map);
var isContextMenu = false;
map.on('contextmenu.show', function (e) {
isContextMenu = true;
var map = document.getElementById('map');
var container = e.contextmenu._container;
// to scroll the context-menu div on the map
container.addEventListener('mousedown', function () {
mouseDown(container);
}, false);
container.addEventListener('mouseout', function () {
mouseOut(container);
}, false);
// has a target
if (e.relatedTarget) {
// target has id
if (e.relatedTarget.id) {
window.relatedContextMenuTarget = e.relatedTarget;
}
}
});
function mouseDown(contextMenu) {
if (isContextMenu === true) {
contextMenu.style.display = "block";
isContextMenu = false;
}
}
function mouseOut(contextMenu) {
if (isContextMenu === false) {
contextMenu.style.display = "none";
}
}
/* To make contextmenu scrollable */
.leaflet-contextmenu {
height: 80px;
overflow: auto;
}
<!doctype html>
<html>
<head>
<title>Leaflet Context Menu</title>
<link rel="stylesheet" href="https://unpkg.com/leaflet@1.0.2/dist/leaflet.css"/>
<link rel="stylesheet" href="https://cdn.jsdelivr.net/gh/aratcliffe/Leaflet.contextmenu/dist/leaflet.contextmenu.min.css"/>
</head>
<body>
<div id="map" style="position: absolute; top: 0; left: 0; width: 100%; height: 100%;"></div>
<script src="https://unpkg.com/leaflet@1.0.2/dist/leaflet.js"></script>
<script src="https://cdn.jsdelivr.net/gh/aratcliffe/Leaflet.contextmenu/dist/leaflet.contextmenu.min.js"></script>
</body>
</html>
我已将滚动条添加到传单地图中。我们在地图上右击就可以看到了。但我无法滚动上下文菜单列表。每当我尝试滚动上下文菜单列表时,它就会消失。所以首先,我需要右键单击地图以查看上下文菜单列表。然后,我想使用滚动条来检查列表中的所有项目。第一部分工作正常,但第二部分没有按我的意愿工作。这是我的代码,
var map,
cm,
ll = new L.LatLng(-36.852668, 174.762675),
ll2 = new L.LatLng(-36.86, 174.77);
map = L.map('map', {
center: ll,
zoom: 15,
contextmenu: true,
contextmenuWidth: 140,
contextmenuItems: [
{
text: 'Show coordinates'
},
{
text: 'Center map here'
},
'-',
{
text: 'Zoom in'
},
{
text: 'Zoom out'
},
{
text: 'A'
},
{
text: 'B'
},
{
text: 'C'
},
{
text: 'D'
},
{
text: 'E'
},
{
text: 'F'
}
]
});
L.tileLayer('http://{s}.tile.osm.org/{z}/{x}/{y}.png', {
attribution: '© <a href="http://osm.org/copyright">OpenStreetMap</a> contributors'
}).addTo(map);
L.marker(ll, {
contextmenu: true,
contextmenuItems: [{
text: 'Marker item',
index: 0
}, {
separator: true,
index: 1
}]
}).addTo(map);
L.marker(ll2, {
contextmenu: true,
contextmenuInheritItems: false,
contextmenuItems: [{
text: 'Marker item'
}]
}).addTo(map);
/* To make contextmenu scrollable */
.leaflet-contextmenu {
height: 80px;
overflow: auto;
}
<!doctype html>
<html>
<head>
<title>Leaflet Context Menu</title>
<link rel="stylesheet" href="https://unpkg.com/leaflet@1.0.2/dist/leaflet.css"/>
<link rel="stylesheet" href="https://cdn.jsdelivr.net/gh/aratcliffe/Leaflet.contextmenu/dist/leaflet.contextmenu.min.css"/>
</head>
<body>
<div id="map" style="position: absolute; top: 0; left: 0; width: 100%; height: 100%;"></div>
<script src="https://unpkg.com/leaflet@1.0.2/dist/leaflet.js"></script>
<script src="https://cdn.jsdelivr.net/gh/aratcliffe/Leaflet.contextmenu/dist/leaflet.contextmenu.min.js"></script>
</body>
</html>
提前致谢!
最后,我找到了自己的解决方案。问题出在 MouseEvent 中。每当我想放大时,都会触发地图的鼠标事件!因此,我为上下文菜单容器添加了监听器以启用和禁用滚动。这是我的解决方案,
var map,
cm,
ll = new L.LatLng(-36.852668, 174.762675),
ll2 = new L.LatLng(-36.86, 174.77);
map = L.map('map', {
center: ll,
zoom: 15,
contextmenu: true,
contextmenuWidth: 140,
contextmenuItems: [
{
text: 'Show coordinates'
},
{
text: 'Center map here'
},
'-',
{
text: 'Zoom in'
},
{
text: 'Zoom out'
},
{
text: 'A'
},
{
text: 'B'
},
{
text: 'C'
},
{
text: 'D'
},
{
text: 'E'
},
{
text: 'F'
}
]
});
L.tileLayer('http://{s}.tile.osm.org/{z}/{x}/{y}.png', {
attribution: '© <a href="http://osm.org/copyright">OpenStreetMap</a> contributors'
}).addTo(map);
L.marker(ll, {
contextmenu: true,
contextmenuItems: [{
text: 'Marker item',
index: 0
}, {
separator: true,
index: 1
}]
}).addTo(map);
L.marker(ll2, {
contextmenu: true,
contextmenuInheritItems: false,
contextmenuItems: [{
text: 'Marker item'
}]
}).addTo(map);
var isContextMenu = false;
map.on('contextmenu.show', function (e) {
isContextMenu = true;
var map = document.getElementById('map');
var container = e.contextmenu._container;
// to scroll the context-menu div on the map
container.addEventListener('mousedown', function () {
mouseDown(container);
}, false);
container.addEventListener('mouseout', function () {
mouseOut(container);
}, false);
// has a target
if (e.relatedTarget) {
// target has id
if (e.relatedTarget.id) {
window.relatedContextMenuTarget = e.relatedTarget;
}
}
});
function mouseDown(contextMenu) {
if (isContextMenu === true) {
contextMenu.style.display = "block";
isContextMenu = false;
}
}
function mouseOut(contextMenu) {
if (isContextMenu === false) {
contextMenu.style.display = "none";
}
}
/* To make contextmenu scrollable */
.leaflet-contextmenu {
height: 80px;
overflow: auto;
}
<!doctype html>
<html>
<head>
<title>Leaflet Context Menu</title>
<link rel="stylesheet" href="https://unpkg.com/leaflet@1.0.2/dist/leaflet.css"/>
<link rel="stylesheet" href="https://cdn.jsdelivr.net/gh/aratcliffe/Leaflet.contextmenu/dist/leaflet.contextmenu.min.css"/>
</head>
<body>
<div id="map" style="position: absolute; top: 0; left: 0; width: 100%; height: 100%;"></div>
<script src="https://unpkg.com/leaflet@1.0.2/dist/leaflet.js"></script>
<script src="https://cdn.jsdelivr.net/gh/aratcliffe/Leaflet.contextmenu/dist/leaflet.contextmenu.min.js"></script>
</body>
</html>