繁体   English   中英

滚动时将导航粘贴到网页顶部不起作用

[英]Sticking nav to top of webpage on scroll not working

我正在尝试将一些脚本应用于导航,我希望导航在滚动到页面时粘在页面顶部。 我知道这可以像我以前所做的那样完成并且已经奏效。 然而这一次它不起作用。

我正在使用此代码 - https://www.w3schools.com/howto/tryit.asp?filename=tryhow_js_navbar_sticky

该网站在这里 - http://www.mjlcarpentryltd.co.uk/

我不知道 javascript 是不是不工作/启动,或者是否有其他样式干扰某处。 任何帮助将不胜感激!

HTML

<div id="navbar">
<nav class="dropdownmenu">
    <ul>
    <li><a href="index.html">Home</a></li>
    <li><a href="about.html">ABOUT US</a></li>
        <li>
            <a href="#">SERVICES</a>
                <ul id="submenu">
                    <li><a href="cutandpitchroofing.html">CUT AND PITCH ROOFING</a></li>
                    <li><a href="trussroofing.html">TRUSS ROOFING</a></li>
                    <li><a href="1stfixing.html">1ST FIXING</a></li>
                    <li><a href="2ndfixing.html">2ND FIXING</a></li>
                    <li><a href="cladding.html">CLADDING</a></li>
                    <li><a href="staircases.html">STAIRCASES</a></li>
                </ul>
        </li>
    <li><a href="projects.html">PROJECTS</a></li>
    <li><a href="testimonials.html">TESTIMONIALS</a></li>
    <li><a href="gallery.html">GALLERY</a></li>
    <li><a href="contact.html">CONTACT US</a></li>
</ul>

JS

<script>
    window.onscroll = function() {myFunction()};

    var navbar = document.getElementById("navbar");
    var sticky = navbar.offsetTop;

    function myFunction() {
    if (window.pageYOffset >= sticky) {
    navbar.classList.add("sticky")
    } else {
    navbar.classList.remove("sticky");
    }
    }
  </script>

CSS

.sticky {
    position: fixed;
    top: 0;
    width: 100%;
}

nav {
    display: block;
    background-color: #76afdb;
    width: 100%;
    z-index: 99999999;
    float: left;
    position: relative;
}

您是否尝试过使用 Foundation 的粘性功能? 需要更少的JS。 或者 Bootstrap 的位置粘性值? 这些都是使用导航栏执行所需操作的快速方法。 进一步解释的两个链接都在这里: https : //foundation.zurb.com/sites/docs/sticky.html https://getbootstrap.com/docs/4.0/utilities/position/

但是,如果您使用的是您提供的链接中的 CSS 和 JS:

CSS:

#navbar {
  overflow: hidden;
  background-color: #333;
}

#navbar a {
  float: left;
  display: block;
  color: #f2f2f2;
  text-align: center;
  padding: 14px 16px;
  text-decoration: none;
  font-size: 17px;
}

#navbar a:hover {
  background-color: #ddd;
  color: black;
}

#navbar a.active {
  background-color: #4CAF50;
  color: white;
}

.content {
  padding: 16px;
}

.sticky {
  position: fixed;
  top: 0;
  width: 100%;
}

.sticky + .content {
  padding-top: 60px;
}

JS:

window.onscroll = function() {myFunction()};

var navbar = document.getElementById("navbar");
var sticky = navbar.offsetTop;

function myFunction() {
  if (window.pageYOffset >= sticky) {
    navbar.classList.add("sticky")
  } else {
    navbar.classList.remove("sticky");
  }
}

这应该有效,我自己测试过。 您的网站还使用了哪些其他 JS 代码? 看不出它是否干扰了这个 JS 代码。

这与之前的评论非常相似,根据滚动位置附加一个类 - 总是对我有用。

您的 jquery 将类似于以下内容

 $(document).ready(function(){
 $(window).scroll(function(){
 if ($(window).scrollTop() > 170){
    $('nav').addClass( "nav-fix-top");  
}

  else {

        $('nav').removeClass( "nav-fix-top");
    }
  });
});

“nav-fix-top”类在它的 css 中有如下内容 -

position:fixed;
top:0;
left:0;
right:0;
margin:auto;
width:100%;
max-width:2000px

在您的特定情况下,问题似乎在于创建变量的范围,这取决于您的设置。 如果您将创建变量的两行移动到主函数中,以便它们在函数中是局部的,这应该可以工作:

window.onscroll = function() {myFunction()};

function myFunction() {
  var navbar = document.getElementById("navbar");
  var sticky = navbar.offsetTop;
  if (window.pageYOffset >= sticky) {
    navbar.classList.add("sticky")
  } else {
    navbar.classList.remove("sticky");
  }
}

暂无
暂无

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

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