Home > Software engineering >  Show navbar brand only after scrolling certain height
Show navbar brand only after scrolling certain height

Time:12-27

I would like to keep the navbar brand hidden at first when the page loads and only make it appear after scrolling down a certain height.

Have tried below code.

$(window).scroll(function () {
  if ($(this).scrollTop() > 1000) {
    document.getElementsByClassName('#logo')[0].style.display = 'hidden';
  } else {
    document.getElementsByClassName('#logo')[0].style.display = 'visible';
  }
});

Please help.

CodePudding user response:

You use getElementsByClassName, and give it an ID

Everything starting with # (hash) is an ID, Everything starting with an . (dot) is a class name. Also, getElementById does not return an array, so you don't need to pick the first element (with [0]).

Try something like:

$(window).scroll(function () {
  if ($(this).scrollTop() > 1000) {
    document.getElementById('logo').style.display = 'hidden';
  } else {
    document.getElementById('logo').style.display = 'visible';
  }
});

Though, as you are using jQuery, you could also clean it up more and use something like:

$(window).scroll(function () {
  if ($(this).scrollTop() > 1000) {
    $('#logo').style.display = 'hidden';
  } else {
    $('#logo').style.display = 'visible';
  }
});

or as Reza suggested use:

$(window).scroll(function () {
  if ($(this).scrollTop() > 1000) {
    $('#logo').hide();
  } else {
    $('#logo').show();
  }
});

CodePudding user response:

You can make something like this

let scrollerBlock = $(".logo");


$(window).scroll(function() {
  if ($(this).scrollTop() > 0) {
    scrollerBlock.fadeIn(400);
  } else {
    scrollerBlock.fadeOut(400);
  }
});
body {
  margin: 0;
}

.block {
  position: fixed;
  top: 0;
  left: 0;
  width: 100%;
  padding: 10px;
  background-color: #777;
  height: 90px;
}

.logo {
  display: none;
  width: 210px;
  height: 70px;
  background: url("https://cdn.sstatic.net/Img/unified/sprites.svg?v=fcc0ea44ba27") no-repeat;
}

.wrapper {
  min-height: 9999px;
}
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<div >


  <div >
    <div ></div>
  </div>

</div>

if you need smoothness

CodePudding user response:

Here The Code, I also added a beta absolute line to help you visualize what happens

if the red line is not visible then the logo disappear

I also change the display from hidden to none because in css there isn't hidden for the display property

try to Run the Snippet below to see the result (make sure then to delete the beta line, following the comments I write for you)

window.addEventListener("scroll", function(e) {
  if (window.scrollY > 1000) {
    document.getElementById('logo').style.display = 'none';
    document.getElementById('betaLine').textContent = "1000px THE LOGO IS HIDDEN!";
  } else {
    document.getElementById('logo').style.display = 'grid';

    /* delete this below, is only for seeing where is 1000 */
    document.getElementById('betaLine').textContent = Math.round(window.scrollY)   "px";
  }
});
body {
  margin: 0;
}

nav {
  background-color: blue;
  width: 100vw;
  height: 3em;
  display: grid;
  place-items: center start;
  padding-left: 1em;
  position: fixed;
  top: 0;
  bottom: 0;
  left: 0;
}

main {
  display: grid;
  gap: 0.5em;
}

main div {
  height: 100vh;
  width: 100vw;
  background-color: lightblue;
  display: grid;
  place-items: center;
}

#betaLine {
  height: 0.2em;
  width: 100vw;
  color: red;
  background-color: red;
  box-shadow: 0 0 1em red;
  position: absolute;
  top: 1000px;
}
<!DOCTYPE html>
<html lang="en">

<head>
  <meta charset="UTF-8">
  <meta http-equiv="X-UA-Compatible" content="IE=edge">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <title>Document</title>
  <link rel="stylesheet" href="style.css">
  <script src="./script.js" defer></script>
</head>

<body>
  <nav>
    <div id="logo">
      CompanyLogo.
    </div>
  </nav>
  <main>
    <div>1 section, scroll to the next</div>
    <div>2 section, scroll to the next</div>
    <div>3 section, scroll to the next</div>
    <div>4 section, the last</div>
  </main>

  <!-- delete this below, is only for seeing where is 1000 -->
  <div id="betaLine">

  </div>
</body>

</html>

  • Related