【问题标题】:Close nav overlay when link is clicked (one pager)单击链接时关闭导航覆盖(一个寻呼机)
【发布时间】:2020-03-13 18:24:03
【问题描述】:

在我的网站的移动版本上,我有一个汉堡包图标,当使用 javascript 单击该图标时,它会打开一个全屏覆盖。这些链接是锚链接,因为它是一个单页网站。单击其中一个链接时,当我希望关闭覆盖时,覆盖保持打开状态。

我相信我遇到的问题是因为我设置了 jQuery 代码,因此当单击其中一个链接时会有平滑的滚动效果。这完美无缺,但覆盖保持打开状态。

所以openNav/closeNav是用javascript设置的,滚动效果是用jQuery设置的。我很难弄清楚如何去做。

这是我的 HTML:

<div id="mobile-navbar">
    <img class="open-nav" src="img/open-nav.png" onclick="openNav()">
    <a href="#1"><img class="logo-mobile" src="img/logo-mobile.png" alt=""></a>
    <div id="myNav" class="overlay">
        <a href="javascript:void(0)" class="closebtn" onclick="closeNav()">&times;</a>
        <div class="overlay-content">
            <a href="#1">ABOUT</a>          
            <a href="#2">RIDING AREAS</a>
            <a href="#3">FACILITY</a>
            <a href="#4">PRICING AND SERVICES</a>
            <a href="#5">CONTACT</a>
        </div>
    </div>
</div>

这是 Javascript(用于打开/关闭导航):

function menu(x) {
   x.classList.toggle("change");
   }
   function openNav() {
        document.getElementById("myNav").style.height = "100%";
    }
    function closeNav() {
        document.getElementById("myNav").style.height = "0%";
    }

这里是 jQuery(用于平滑滚动):

$(document).ready(function(){
  $("a").on('click', function(event) {
    if (this.hash !== "") {
      event.preventDefault();
      var hash = this.hash;
      $('html, body').animate({
        scrollTop: $(hash).offset().top
      }, 800, function(){
        window.location.hash = hash;
      });
    }
  });
});

【问题讨论】:

  • 同时添加css代码

标签: javascript jquery html css nav


【解决方案1】:

您可以在所有链接中添加onclick="closeNav();"

【讨论】:

    【解决方案2】:

    好的,所以我认为最好选择使用完整的 js 或仅使用 Jquery。将两者结合起来并不是一个好的做法,因为 jquery 它本身需要大量开销,因此在可以使用 jquery 的某些东西上使用纯 js 可能会被视为对另一半的不公正。

    对于纯 Jquery

    $(document).ready(function(){
    
      let isOpen = false; //=========> use a flag to toggle navbar
    
      function navToggle(){
        //Click event for Nav
        $("#myNav").on('click', function(event) {
         if(!isOpen){
           isOpen = !isOpen;
           $(this).css("height", "100%");            
         }else{
           isOpen = !isOpen;
           $(this).css("height", "0%");  
         }
        });
      }
    
    
      //Click event for Nav Links
      $("a").on('click', function(event) {
         //Call nav to toggle
         isOpen = true;
         navToggle();
    
         if (this.hash !== "") {
           event.preventDefault();
           var hash = this.hash;
           $('html, body').animate({
             scrollTop: $(hash).offset().top
           }, 800, function(){
            window.location.hash = hash;
           });
         }
      });
    });
    

    【讨论】:

      猜你喜欢
      • 2018-07-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-12-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多