index.html
<!DOCTYPE html>
<html>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1">
<title>空间与UI组件 - 自定义右键菜单</title>
<style type="text/css">
html,body{margin:0px;height:100%;width:100%}
.container{width:100%;height:100%}
#info{position:fixed;background-color:rgba(13, 13, 13, 0.5);padding:10px 10px 10px 10px;font:13px bold sans-serif;color:#fff;right:20px;top:20px;width:100px;height:40px;overflow:hidden}
.custom_menu{width:90px;color:#fff;background-color:#051127;border:1px solid #0c2c45;list-style:none;padding:0}
.custom_menu li{padding:0 8px;font-size:12px;line-height:24px}
.custom_menu li:hover{background:#0e595e;cursor:pointer}
.custom_menu li+li{border-top:1px solid #bbb}
</style>
<link rel="stylesheet" href="https://unpkg.com/maptalks/dist/maptalks.css">
<script type="text/javascript" src="https://unpkg.com/maptalks/dist/maptalks.min.js"></script>
<body>
<div id="map" class="container"></div>
<div id="info"></div>
<script>
var map = new maptalks.Map('map', {
center: [-0.113049,51.49856],
zoom: 14,
baseLayer: new maptalks.TileLayer('base', {
urlTemplate: 'https://{s}.basemaps.cartocdn.com/light_all/{z}/{x}/{y}.png',
subdomains: ['a','b','c','d'],
attribution: '© <a href="http://osm.org">OpenStreetMap</a> contributors, © <a href="https://carto.com/">CARTO</a>'
})
});
var options = {
'custom': true,
'items' : '<ul class="custom_menu">' +
'<li onclick="clickItem(this);">Locate</li>' +
'<li onclick="clickItem(this);">Mark</li>' +
'<li onclick="clickItem(this);">Identify</li>' +
'<li onclick="clickItem(this);">About</li>' +
'</ul>'
};
map.setMenu(options).openMenu();
map.on('contextmenu', function (e) {
map.openMenu(e.coordinate);
});
function clickItem(dom) {
document.getElementById('info').innerHTML = dom.innerText + ' clicked';
}
</script>
</body>
</html>