首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在另一个div中用contextmenu块contextmenu

在另一个div中用contextmenu块contextmenu
EN

Stack Overflow用户
提问于 2021-02-06 15:36:21
回答 1查看 305关注 0票数 1

我在主div中有一个contextmenu,它工作正常,但是当我单击item divs时,我的contextmenu就不能工作了。我试图阻止条目div中的contextmenu,但它不起作用。因此,我想阻止条目div中的contextmenu主目录,为每个条目添加另一个contextmenu,例如删除或编辑。提前谢谢。

这是我的密码:

代码语言:javascript
复制
// main
const main = document.querySelector('.main');
main.addEventListener("contextmenu", function(event) {
  event.preventDefault();
  var contextElement = document.getElementById("context-menu");
  contextElement.style.top = event.offsetY + "px";
  contextElement.style.left = event.offsetX + "px";
  contextElement.classList.add("active");
});
window.addEventListener('click', function() {
  document.getElementById('context-menu').classList.remove('active');
});

// item
const item = document.querySelector('.item');
item.addEventListener('contextmenu', function(event) {
  event.preventDefault();
});
代码语言:javascript
复制
body {
  margin: 0px;
  font-family: "Open Sans", sans-serif;
}

#context-menu {
  position: absolute;
  z-index: 10000;
  width: 150px;
  background: #1b1a1a;
  border-radius: 5px;
  transform: scale(0);
  transform-origin: top left;
}

#context-menu.active {
  transform: scale(1);
  transition: transform 300ms ease-in-out;
}

#context-menu .item {
  padding: 8px 10px;
  font-size: 15px;
  color: #eee;
}

#context-menu .item:hover {
  background: #555;
}

.main {
  position: relative;
  width: 80%;
  height: 80vh;
  border: 1px solid red;
}

.list {
  display: grid;
  grid-template-columns: repeat(4, 1fr);
  grid-gap: 10px;
}

.main .item {
  border: 1px solid red;
  height: 100px;
}
代码语言:javascript
复制
<div id="context-menu">
  <div class="item">
    New folder
  </div>
  <div class="item">
    New Document
  </div>
</div>


<div class="main">
  <div class="list">
    <div class="item">
      item 1
    </div>
    <div class="item">
      item 2
    </div>
    <div class="item">
      item 3
    </div>
  </div>
  main
</div>

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-02-06 19:23:44

解决方案是添加一个if来检查event.target.id,如下所示:

代码语言:javascript
复制
if (event.target.id === 'item') {
  main_menu.classList.remove('active');
} else {
  var item_menu = document.querySelector("#item-menu");
  item_menu.classList.remove("active");
  main_menu.classList.add('active');
}

代码语言:javascript
复制
window.addEventListener('click', function() {
  document.querySelector('#main-menu').classList.remove('active');
  document.querySelector('#item-menu').classList.remove('active');
});

// main
const main = document.querySelector('#main');
main.addEventListener("contextmenu", function(event) {
  event.preventDefault();

  var main_menu = document.querySelector("#main-menu");
  main_menu.style.top = event.pageY + "px";
  main_menu.style.left = event.pageX + "px";

  if (event.target.id === 'item') {
    main_menu.classList.remove('active');
  } else {
    var item_menu = document.querySelector("#item-menu");
    item_menu.classList.remove("active");
    main_menu.classList.add('active');
  }

});

// items
const items = document.querySelectorAll('#item');
items.forEach(item => {
  item.addEventListener('contextmenu', function(event) {

    event.preventDefault();
    var item_menu = document.querySelector("#item-menu");
    item_menu.style.top = event.pageY + "px";
    item_menu.style.left = event.pageX + "px";
    item_menu.classList.add('active');
  });
});
代码语言:javascript
复制
body {
  margin: 0px;
  font-family: "Open Sans", sans-serif;
}

.context-menu {
  position: absolute;
  z-index: 10000;
  width: 180px;
  background: #1b1a1a;
  border-radius: 5px;
  transform: scale(0);
  transform-origin: top left;
}

.context-menu.active {
  transform: scale(1);
  transition: transform 300ms ease-in-out;
}

.context-menu .link {
  padding: 8px 10px;
  font-size: 15px;
  color: #eee;
}

.context-menu .link:hover {
  background: #555;
}

.main {
  position: relative;
  width: 80%;
  height: 80vh;
  border: 1px solid red;
}

.list {
  display: grid;
  grid-template-columns: repeat(4, 1fr);
  grid-gap: 10px;
}

.main .item {
  border: 1px solid red;
  height: 100px;
  position: relative;
}
代码语言:javascript
复制
<div id="main-menu" class="context-menu">
  <div class="link" oncontextmenu="return false;">
    New Folder
  </div>
  <div class="link" oncontextmenu="return false;">
    New Document
  </div>
</div>

<div id="item-menu" class="context-menu">
  <div class="link" oncontextmenu="return false;">
    Delete
  </div>
  <div class="link" oncontextmenu="return false;">
    Update
  </div>
</div>


<div class="main" id="main">
  <div class="list">
    <div class="item" id="item">
      item 1
    </div>
    <div class="item" id="item">
      item 2
    </div>
    <div class="item" id="item">
      item 3
    </div>
  </div>
  main
</div>

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/66078635

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档