简体   繁体   English

单击外部时关闭导航(位置固定)但单击导航链接时不关闭?

[英]Close nav (position fixed) when click outside but NOT when navlinks are clicked?

I've looked everywhere and tried several things but I can't find a way to make the nav NOT closing when you click on a link.我到处寻找并尝试了几件事,但是当您单击链接时,我找不到使导航不关闭的方法。 At this state it closes when I click anywhere.在这个 state 当我点击任何地方时它会关闭。

I know it's because the nav is position FIXED so it's outside the document's flow and that's why clicking on the links is the same as clicking anywhere.我知道这是因为导航是 position FIXED所以它在文档流程之外,这就是为什么单击链接与单击任何地方相同。 What can I do?我能做些什么?

Someone has an idea?有人有想法吗?

Thank you very much!非常感谢!

JS: JS:

<script>
  window.addEventListener('mouseup', function(event) {
    var nav = $("#mySidenav");
    var navlinks = $("[id^='navLink']");
    if(event.target != nav && event.target != navlinks){
      closeNav();
    };
  })
</script>

CSS: CSS:

 .sidenav {
    height: 100%; 
    width: 25rem; 
    position: fixed; 
    z-index: 5;  
    left: -27rem;
    background: linear-gradient(15deg, #e2af40a9, rgba(51, 116, 116, 
    0.589)30%, rgb(51, 116, 116));
    overflow: hidden;
    padding-top: 1rem; 
    transition: all ease-in-out 0.4s; 
   }

HTML: HTML:

<div id="mySidenav" class="sidenav">
    <img id="logo" src="..." alt="...">

     <a href="javascript:void(0)" class="text-decoration-none closebtn" 
     onclick="closeNav()">&times;</a>
            
     <a id="navLink1" class="animNav item text-decoration-none align-bottom" 
     href="#">about</a>
            
      <a id="navLink2" class="animNav item text-decoration-none align-bottom" 
      href="#">another link</a>
            
       <a id="navLink3" class="animNav item text-decoration-none align-bottom" 
       href="#">another link</a>
            
       <a id="navLink4" class="animNav item text-decoration-none align-bottom" 
       href="#">another link</a>
            
       <a id="navLink5" class="animNav item text-decoration-none align-bottom" 
       href="#">another link</a>
</div>

    <button type="button" class="navbar-dark btn btn-styleNav navbar-toggler" onclick="openNav()" &#9776;>          
        <span class="navbar-toggler-icon"></span>
    </button>
    
    <script>
       function openNav() {
          $("#mySidenav").css({"left": "0rem"});}
                
        function closeNav() {
           $("#mySidenav").css({"left": "-27rem"});}
    </script>

Ok I found out what was not working: EventListeners dont understand Jquery.好的,我发现什么不起作用:EventListeners dont understand Jquery。 + my code was not really well written so I cleaned it up! + 我的代码写得不太好,所以我清理了它!

So, here is my working code, if it can help someone!所以,这是我的工作代码,如果它可以帮助某人!

HTML HTML

<!--NAVIGATION-->
<header>
    <div id="mySidenav" class="sidenav">
        <button type="button" id="closeButton">&times;</button>

        <a href="#">Link</a>

        <a href="#">Link</a>

        <a href="#">Link</a>

        <a href="#">Link</a>

        <a href="#">Link</a>
    </div>

    <button id="openButton" type="button">
        <span class="navbar-toggler-icon"></span>
    </button>
</header>

CSS CSS

.sidenav {
    height: 100%;
    width: 25rem;
    position: fixed;
    z-index: 5;
}

.sidenav .closebtn {
    position: absolute;
    top: 0;
    right: 0px;
    z-index: 1;
    overflow: hidden;
}

JS JS

//SIDENAV OPEN AND CLOSE DEPENDING ON WHERE YOU CLICK

var open = false;
//Opening and closing functions
function openNav() {
    $("#mySidenav").css({"left": "0rem"});
    open = true; 
}

function closeNav() {
    $("#mySidenav").css({"left": "-27rem"});
    open = false;
}
//Event on button to open the nav 
$("#openButton").click(function() {
    openNav();
    console.log("Opening nav")
});
//Event on button to close the nav
$("#closeButton").click(function() {
    closeNav();
    console.log("Closing nav")
});

//check if the nav is opened and if the element clicked is NOT the nav and if the element clicked is also NOT the navlinks (that is to say: you clicked anywhere else on the page) then, the nav closes.
document.addEventListener("mouseup", function(event){
    var nav = document.getElementById('mySidenav');
    if(open == true && event.target != nav && event.target.parentNode != nav){
            closeNav();
            console.log("Closing because the click was not on the nav and not on the nav links");
    //check if the nav is really closed
    } else if (open == false) {
        console.log("Nav is closed by default")
    }  
})

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM