Javascript 如何在openlayers 5中右键单击删除功能

Javascript 如何在openlayers 5中右键单击删除功能,javascript,contextmenu,openlayers,openlayers-5,Javascript,Contextmenu,Openlayers,Openlayers 5,我在openlayers的地图上有一个功能,我的要求是允许用户通过右键单击删除该功能 以下是参考屏幕截图: 当用户单击“删除”时,应删除该功能。 如果用户在右键单击功能后单击其他位置,“删除”菜单应消失 以下是示例:您需要覆盖默认内容菜单并添加自己的内容。添加监听器以在视图更改、用户点击esc键等情况下将其关闭。添加此代码对示例有效: var contextMenu = document.createElement('div'); contextMenu.id = "contextMenu"

我在openlayers的地图上有一个功能,我的要求是允许用户通过右键单击删除该功能

以下是参考屏幕截图:

当用户单击“删除”时,应删除该功能。 如果用户在右键单击功能后单击其他位置,“删除”菜单应消失


以下是示例:

您需要覆盖默认内容菜单并添加自己的内容。添加监听器以在视图更改、用户点击esc键等情况下将其关闭。添加此代码对示例有效:

var contextMenu = document.createElement('div');
contextMenu.id = "contextMenu"
contextMenu.dir = "ltr";
contextMenu.className = "contextMenu";
contextMenu.style.position = "absolute";
contextMenu.style.left = "0px";
contextMenu.style.top = "0px";
contextMenu.style.display = "none";
map.getViewport().appendChild(contextMenu);

contextMenu.innerHTML = 
    '<div id="contextMenuRemove" class="menuItem" onclick="removeFeature();"> Remove </div>';

var mouseOver = false;

function hideContextMenu() {
    contextMenu.style.display = "none";
}

map.on('click', hideContextMenu);

map.getView().on('change', function () {
    if (contextMenu.style.display != "none") {
       setTimeout(hideContextMenu, 250);  // delay reset until map singleclick event has fired
    }
});

contextMenu.addEventListener('contextmenu', function (e) {
    e.preventDefault();
});

document.addEventListener('keydown', function (e) {
    if (e.keyCode == 27) {
        hideContextMenu();
    }
});

function openContextMenu(x, y) {
    contextMenu.style.right = "";
    contextMenu.style.bottom = "";
    contextMenu.style.left = x + "px";
    contextMenu.style.top = y + "px";
    contextMenu.style.display = "block";
}

var canvas = map.getViewport().getElementsByTagName("canvas")[0];
var features;

canvas.addEventListener('contextmenu', function (e) {
    features = map.getFeaturesAtPixel([e.x, e.y]);
    if (features) {
        e.preventDefault();
        openContextMenu(e.x, e.y);
    }
});

function removeFeature() {
    source.removeFeature(features[0]);
}

contextmenu还有一个扩展名[
.contextMenu {
    background-color: #eee;
    position: absolute;
    border: solid 1px black;
    width: 100px;
}
.contextMenu .menuItem {
    cursor: pointer;
    padding: 5px;
}
.contextMenu .disabled {
    color: #aaa;
    pointer-events: none;
    cursor: none;
}
.contextMenu .menuItem:hover {
    background-color: #ccc;
}
.menuSeparator {
    border-bottom: solid 1px black;
}";