【问题标题】:How to open a menu in electron js on click of a div如何在点击 div 时在电子 js 中打开菜单
【发布时间】:2021-04-24 10:14:19
【问题描述】:

我制作了一个自定义标题栏应用程序,然后我也给了它一个file 菜单。(电子)

现在我想在单击此菜单时打开一个菜单。我想要一个弹出窗口,但弹出窗口不应该是菜单的标准窗口弹出窗口,我也想自定义...但是如果需要太多时间,创建一个新窗口会变得非常乏味。

很可能我想实例化一个部分,但我不知道该怎么做

现状

我有一个带有#container div 的窗口,该窗口有一个#buttons div,其中有3 个#minimize、#maximize、#close,每个都有一个span

#buttons 也有 2 个 div .menu1 和 .menu2 我希望这些菜单在文件和编辑菜单等窗口中表现得像普通菜单一样

    <div id="container">
        <nav>
        <div id="buttons">
          <div id="file">
            <span class = "menu1">file</span>  
          </div>
          <div id="about_us">
            <span class = "menu2">about..us</span>
          </div>
          <div id="minimize" onclick="min()">
            <span>-</span>
          </div>
          <div id="maximize" onclick="max()">
            <span>+</span>
          </div>
          <div id="close" onclick="uff()">
            <span>&times;</span>
          </div>
        </div>
      </nav>
    </div>

结果是

所有的菜单和按钮都是可点击的并且有悬停颜色

【问题讨论】:

  • 嗨,Shaurya,你能告诉我们你尝试了什么吗?显示一些代码,我们可以更好地了解您想要实现的目标。
  • @anatolhiman 你会编辑问题

标签: html css electron


【解决方案1】:

在这里你需要做这样的事情:

  1. 在 html 和 css 中创建弹出窗口。使用位置:绝对;和 z-index 让它覆盖应用程序的其余部分。

  2. 然后使用 css 类隐藏弹出窗口,例如 .hide,将弹出窗口设置为 display: none;

  3. 您现在需要一小段 javascript 来切换 .hide 类。例如像这样的函数:const togglePopup = () =&gt; document.querySelector('.popup').classList.toggle('hide')

  4. 通过单击您的元素之一触发 togglePopup 脚本:

    const trigger = document.querySelector('#idOrClassOfTriggerElement')

    trigger.addEventListener('click', () => togglePopup()

  5. 使用相同类型的技术添加关闭弹出窗口的方法 - 将事件监听器添加到触发器元素(例如 X 图标)并调用与 #3 中相同的切换函数。

希望这是您想要实现的目标。

编辑:弹出覆盖的示例代码:

const popup = document.querySelector('.popup')
const closeBtn = document.querySelector('.popup-close')
const openBtn = document.querySelector('.open')
const body = document.querySelector('body')

const showPopup = () => {
  popup.classList.add('fade-in')
  body.classList.add('scroll-stop')
}

const hidePopup = () => {
  popup.classList.remove('fade-in')
  popup.classList.add('fade-out')
  body.classList.remove('scroll-stop')
  setTimeout(() => {
    popup.classList.remove('fade-out')
  }, 500)
    body.focus();
}

openBtn.addEventListener('click', showPopup)
closeBtn.addEventListener('click', hidePopup)
.popup {
  position: fixed;
  width: 100%;
  height: 100%;
  top: 0;
  left: 0;
  right: 0;
  bottom: 0;
  background: #fefefe;
  z-index: 9;
  opacity: 0;
  pointer-events: none;
  overflow: scroll;
}

.popup-inner {
  width: 100%;
  position: relative;
  padding: 6% 16% 0;
}

.popup-close {
  position: relative;
  z-index: 10;
  text-align: center;
  color: #aaa;
  font-size: 4rem;
  cursor: pointer;
  position: fixed;
  right: 3%;
  top: 3%;
}

.popup-close::before {
  content: "\00d7";
}

.popup-close:hover::before {
  color: #000;
  transition: 0.6s all ease-in;
}

.open {
  text-align: center;
  cursor: pointer;
  background: transparent;
  padding: 1rem 2rem;
  border: 2px solid;
  border-radius: 6px;
  color: #000;
  font-weight: bold;
  position: absolute;
  top: 25%;
  left: 44%;
}

.open:hover {
  background: #ffffff18;
}

.fade-in {
  opacity: 1;
  pointer-events: unset;
  transition: 0.3s all ease;
}

.fade-out {
  opacity: 0;
  pointer-events: none;
  transition: 0.3s all ease;
}

.background {
  height: 100vh;
  width: 100vw;
  background: olive;
  margin: 0;
  padding: 0;
}
<div class="background">
  <button class="open">OPEN POPUP</a>
</div>


<!-- Add popup at the bottom of the html document, before </body> -->
<div class="popup" role="dialog" aria-label="Popup">
  <div class="popup-close" role="button" arial-label="Close popup" tabindex="1"></div>
  <div class="popup-inner">
    <h2>This is a popup title</h3>
      <p>Popup content...</p>
  </div>
</div>

【讨论】:

  • 这很有帮助,但有一个疑问,我如何创建 popup window in html and css 应该只是一个 div 吗?或者其他东西应该更好?
  • 所以只是为了向您确认(因为事实证明我在创建任何严肃的项目方面没有经验)弹出窗口将一直存在但只是在单击文件 div 时显示?
  • 是的,没错。除非您在 React、Vue 或其他有助于延迟加载组件的前端框架中创建页面,否则您需要在从服务器发送到客户端(浏览器)的代码中包含所有内容,以便随时显示当您想要显示弹出窗口时,无法重新加载页面并从服务器请求更多 html。这意味着 html 应该从一开始就包含弹出窗口,但使用 CSS 从视图中隐藏。你用 div 创建它是的,我可以在我的答案中添加一些示例代码。
  • 哦....这很基本,但我没有那么有经验,下次我会尝试更好,顺便说一句,我最终实现了同样的东西,但具有更多基本功能
猜你喜欢
  • 1970-01-01
  • 2018-02-15
  • 1970-01-01
  • 2013-04-07
  • 2015-05-31
  • 2021-08-09
  • 1970-01-01
  • 1970-01-01
  • 2017-01-20
相关资源
最近更新 更多