css 导航栏的Javascript

np8igboo  于 2023-01-27  发布在  Java
关注(0)|答案(1)|浏览(135)

我正在创建一个导航栏。添加javascript有两个功能。第一,当用户向下滚动时,导航栏将不可见。第二,如果用户到达网页的末尾或中途向上滚动,不可见的导航栏将再次可见。我无法在我的代码中找到问题,如果有人能为我指出它,将是有帮助的

/ select the navbar element
var navbar = document.getElementById("navbar");

// set a variable to track the previous scroll position
var prevScrollpos = window.pageYOffset;

// listen for scroll events on the window
window.onscroll = function() {
  var currentScrollPos = window.pageYOffset;

  // check if the user has scrolled down
  if (prevScrollpos > currentScrollPos) {
    navbar.style.top = "0";
  } else if (currentScrollPos + window.innerHeight >= document.body.offsetHeight) {
    // check if the user has reached the bottom of the page
    navbar.style.top = "0";
  } else {
    navbar.style.top = "-50px";
  }
  prevScrollpos = currentScrollPos;
};
kuuvgm7e

kuuvgm7e1#

你提供的代码看起来很适合创建一个具有你描述的功能的导航栏。导航栏元素被选中,onscroll事件被用来跟踪用户的滚动位置,并根据该位置使导航栏可见或不可见。
我看到的主要问题是你使用navbar.style.top属性来改变导航栏的可见性,最好使用一个类来改变导航栏的可见性,这样你就可以添加CSS样式来控制过渡。
您可以创建一个类,如“navbar-invisible”,然后向navbar元素添加或删除该类以更改其可见性。

// select the navbar element
var navbar = document.getElementById("navbar");

// set a variable to track the previous scroll position
var prevScrollpos = window.pageYOffset;

// listen for scroll events on the window
window.onscroll = function() {
  var currentScrollPos = window.pageYOffset;

  // check if the user has scrolled down
  if (prevScrollpos > currentScrollPos) {
    navbar.classList.remove("navbar-invisible");
  } else if (currentScrollPos + window.innerHeight >= document.body.offsetHeight) {
    // check if the user has reached the bottom of the page
    navbar.classList.remove("navbar-invisible");
  } else {
    navbar.classList.add("navbar-invisible");
  }
  prevScrollpos = currentScrollPos;
};


.navbar-invisible {
  top: -50px;
  transition: top 0.3s ease-in-out;
}

在不同的浏览器中测试此代码非常重要,因为使用JavaScript时,浏览器兼容性有时会成为一个问题。

相关问题