通过 img 下拉菜单

Drop down menu via img

我正在为我和我的朋友创建一个个性化网站,在中心的顶部我有一些社交媒体链接。我需要为每张社交媒体图片添加两个链接,因为我和我的朋友都在该网站上。我正在尝试使用事件侦听器让 onclick 函数提供一个包含指向两个站点的链接的下拉菜单。它不工作。这是适当的代码。

Html:

<div id="social-media-links">      
  <div class="drop-container">
    <div class="drop-button"><img onclick="myFunction()" id="facebook"src="images/facebook">
      <div class="drop-menu">
       <a href="https://www.facebook.com/30luv_-110625097180857/">30luv_</a>
       <a href="https://www.facebook.com/pgiovanni1234/">Paul Giovanni</a>
      </div>
    </div>
 </div>
 <div class="drop-button"><img id="instagram" src="images/instagram"></div>
 <div class="drop-button"><img id="youtube" src="images/youtube"></div>
</div>

CSS:

    .drop-container {

  position: relative;
  display: inline-block;

}

.drop-button:hover, .dropbtn:focus {

  background-color: aquamarine;

}

.drop-button {

  border: none;
  cursor: pointer;
  display: inline;

}

.drop-menu {

  display: none;
  position: absolute;
  background-color: #f1f1f1;
  min-width: 160px;
  box-shadow: 0px 8px 16px 0px rgba(0,0,0,0.2);
  z-index: 1;

}

.drop-menu a {

  color: black;
  padding: 12px 16px;
  text-decoration: none;
  display: block;

}

.show {display:block;}

Javascript

function myFunction() {
    document.getElementsByClassName("drop-menu").classList.toggle("show");
  }
  
  // Close the dropdown menu if the user clicks outside of it
  window.onclick = function(event) {
    if (!event.target.matches('.drop-button')) {
      var dropdowns = document.getElementsByClassName("drop-menu");
      var i;
      for (i = 0; i < dropdowns.length; i++) {
        var openDropdown = dropdowns[i];
        if (openDropdown.classList.contains('show')) {
          openDropdown.classList.remove('show');
        }
      }
    }
  }

这是页面的图片:

Center top social media links

看起来有两点不对。

您的 myFunction 没有正确选择下拉菜单。以下应该有效。

function myFunction() {
  document.querySelector(".drop-menu").classList.toggle("show");
}

您的 window.onclick 函数需要调整以在显示时包含目标下拉菜单。查看代码中的注释。

window.onclick = function(event) {
  // only the below line was updated
  if (event.target.contains(document.querySelector('.drop-menu.show'))) {
    var dropdowns = document.getElementsByClassName("drop-menu");
    var i;
    for (i = 0; i < dropdowns.length; i++) {
      var openDropdown = dropdowns[i];
      if (openDropdown.classList.contains('show')) {
        openDropdown.classList.remove('show');
      }
    }
  }
}

我决定把js拿出来做普通的css.....

HTML:

 <div id="dropf" class="drop">
 <img id="facebook" src="images/facebook">
    <a class="links" href="https://www.facebook.com/30luv_-110625097180857/">30luv_</a>
    <a class="links" href="https://www.facebook.com/pgiovanni1234/">Paul G</a></button>
  </div>
  <div id="dropi" class="drop">
    <img id="instagram" src="images/instagram">
    <a class="links" href="https://www.instagram.com/30luv_/">30luv_</a>
    <a class="links" href="https://www.instagram.com/paulgiovanniguitar">Paul G</a>
  </div>
  <div id="dropy" class="drop">
    <img id="youtube" src="images/youtube">
    <a class="links" href="https://www.youtube.com/channel/UCQHhVyq8BGRc1-IAEKFQGXw">30luv_</a>
    <a class="links" href="https://www.youtube.com/channel/UCGtfQ6n5mCQrnNHtN-U8zbA">Paul G</a>
  </div>

CSS:

.drop:hover > .links {

    display: block;

}

这使得当您将鼠标悬停在它上面时,链接会出现...w/o javascript。抱歉,只是更改一下。