即使指针离开元素边界,如何保持函数仍然工作

问题描述 投票:0回答:1

我正在尝试创建一个按钮下拉列表,仅当鼠标指针悬停在第一个未隐藏的按钮上时才显示,并且当指针不再悬停时离开时,下拉列表消失。 问题是我希望当指针离开初始按钮边界时,当指针悬停在其他按钮上时,其他按钮仍然可见并且不会消失。

注意: 我仍然是 JavaScript 的初学者,所以请不要评判我解释问题或编码的方式。我仍在学习,希望我会变得更好。

代码:

        const themeBtn = document.getElementById("thBtn");
        const lightBtn = document.getElementById("liBtn");
        const darkBtn = document.getElementById("daBtn");
        const navyBtn = document.getElementById("naBtn");

        themeBtn.addEventListener('pointerenter', () => {
             lightBtn.style.display = "block";
             darkBtn.style.display = "block";
             navyBtn.style.display = "block";



        });
        themeBtn.addEventListener("pointerout", () => {
            lightBtn.style.display = "none";
            darkBtn.style.display = "none";
            navyBtn.style.display = "none";

        });

我尝试了pointerup和pointerdown,但仍然不起作用。

javascript html dom-events pointer-events
1个回答
0
投票

嗨,塔娜,欢迎来到 stackoverflow

我已经为您尝试了一些方法,您可以在下面找到 让我知道你的想法!

这不是最好的方法,我采取了一些捷径,但在更好的上下文中,您应该使下拉列表生成动态并管理要在 JavaScript 端的下拉列表中显示的数据的生成。这将更干净且更易于维护。但对于演示来说,我认为已经足够了。

const buttonFirstDropdown = document.querySelector(".button-first-dropdown");
const buttonSecondDropdown = document.querySelector(".button-second-dropdown");

const firstDropdown = document.querySelector('#first-dropdown');
const secondDropdown = document.querySelector('#second-dropdown');

buttonFirstDropdown.addEventListener('click', () => {
    firstDropdown.classList.toggle('active');
})

buttonSecondDropdown.addEventListener('click', () => {
    secondDropdown.classList.toggle('active');
})
body {
  font-family: sans-serif;
}

#app {
  display: flex;
  flex-direction: row wrap;
  align-items: flex-start;
}

.dropdown {
  width: 200px;
  margin: 20px;
}

.dropdown-list {
  padding: 0;
  margin: 0;
}

.dropdown-item {
  cursor: pointer;
  padding: 5px;
  border: 1px solid #ccc;
}

#first-dropdown, #second-dropdown {
  height: 0;
  overflow: hidden;
}

#first-dropdown.dropdown-list.active, 
#second-dropdown.dropdown-list.active {
  height: 100%;
  overflow: auto;
}
<!DOCTYPE html>
<html>
  <head>
    <title>JavaScript Sandbox</title>
    <link rel="stylesheet" href="styles.css" />
    <meta charset="UTF-8" />
  </head>

  <body>
    <div id="app">
      <div class="dropdown">
        <button type="button" class="button-first-dropdown">Open It (1)</button>
        <div id="first-dropdown" class="dropdown-list">
          <!-- You can dynamically generate your list here -->
          <div class="dropdown-item">Element 1</div>
          <div class="dropdown-item">Element 2</div>
          <div class="dropdown-item">Element 3</div>
        </div>
      </div>

      <div class="dropdown">
        <button type="button" class="button-second-dropdown">Open It (2)</button>
        <div id="second-dropdown" class="dropdown-list">
          <!-- You can dynamically generate your list here -->
          <div class="dropdown-item">Element 1</div>
          <div class="dropdown-item">Element 2</div>
          <div class="dropdown-item">Element 3</div>
        </div>
      </div>
    </div>

    <script src="./index.js"></script>
  </body>
</html>

© www.soinside.com 2019 - 2024. All rights reserved.