【问题标题】:Wrong offset(); on Firefox错误的偏移量();在火狐上
【发布时间】:2019-04-02 10:11:38
【问题描述】:

我使用offset(); 在引导程序上设置.nav 菜单的位置,并在.nav 菜单附近的scroll intersection .r-logo-menu-desktop 类时设置fixed,添加fixed 类到.nav 并在滚动到顶部时将其删除,让.nav 在同一个position 中。在 Safari/Chrome 中工作正常,但在 Firefox 中,菜单转到 fixed 太儿子,在滑块的中间,而不是在最后。可以看例子here

    <!-- Navigation -->
    <div class="nav-wrapper">
    <div class="nav"><nav id="navbar" class="navbar navbar-expand-lg mx-auto navbar-dark bg-white">       

    <div class="mx-auto order-0 order-md-1 position-relative">
                 <img class="r-logo-menu" src="img/Logos-RUCAB-7.png" />
        <button class="navbar-toggler" type="button" data-toggle="collapse" data-target=".dual-collapse2">
            <span class="navbar-toggler-icon"></span>
        </button>
    </div>
    <div class="navbar-collapse collapse w-100 dual-collapse2 order-2 order-md-2">
        <ul  class="navbar-nav mx-auto mr-auto text-center">
         <img class="r-logo-menu-desktop" src="img/Logos-RUCAB-7.png" />
        <nav class="cl-effect-5">
            <li class="nav-item">
                <a class="nav-link menu-rucab js-scroll-trigger" href="#home"><span data-hover="HOME">HOME</span></a>
            </li>
                    </nav>
                  <nav class="cl-effect-5">
            <li class="nav-item">
                <a class="nav-link menu-rucab js-scroll-trigger" href="#rucab"><span data-hover="RUCAB">RUCAB</span></a>
            </li>
             </nav>
                    <nav class="cl-effect-5">
            <li class="nav-item">
                <a class="nav-link menu-rucab js-scroll-trigger" href="#inscripciones"><span data-hover="INSCRIPCIONES">INSCRIPCIONES</span></a>
            </li>
             </nav>
             <nav class="cl-effect-5">
            <li class="nav-item active">
                <a class="nav-link menu-rucab js-scroll-trigger" href="#habitaciones"><span data-hover="HABITACIONES">HABITACIONES</span></a>
            </li>
             </nav>
              <nav class="cl-effect-5">
            <li class="nav-item">
                <a class="nav-link menu-rucab js-scroll-trigger" href="#staff"><span data-hover="STAFF">STAFF</span></a>
            </li>
             </nav>
             <nav class="cl-effect-5">
            <li class="nav-item">
                <a class="nav-link menu-rucab js-scroll-trigger" href="#contact"><span data-hover="BLOG">BLOG</span></a>
            </li>
             </nav>
                    <nav class="cl-effect-5">
            <li class="nav-item">
                <a class="nav-link menu-rucab js-scroll-trigger" href="#contacto"><span data-hover="CONTACTO">CONTACTO</span></a>
            </li>
             </nav>

        </ul>
    </div>
</nav>
</div>
</div>

JQUERY

      // cache the element
var $navBar = $('.nav');
    var $rlogo = $('.r-logo-menu-desktop');

// find original navigation bar position
var navPos = $navBar.offset().top;

// on scroll
$(window).scroll(function() {

    // get scroll position from top of the page
    var scrollPos = $(this).scrollTop();

    // check if scroll position is >= the nav position
    if (scrollPos >= navPos) {
        $navBar.addClass('fixed');
        $rlogo.addClass('show');
    } else {
        $navBar.removeClass('fixed');
        $rlogo.removeClass('show');
    }

});

CSS

.r-logo-menu-desktop.show {

    margin-bottom: 2px;
    opacity: 1 !important;
    width: 60px;
    margin-right: 20px;

}

.r-logo-menu-desktop {
opacity: 0; 
margin-right: 20px;  
transition: opacity 300ms ease;
}

.nav-wrapper {
    height: 90px;
    background: #fff;
}

.nav-wrapper .nav {
    height: 20px;
    background: #fff;
    line-height: 20px;
}
.navbar-nav {
    background: #fff;
}

.nav-wrapper .nav.fixed {
      -webkit-backface-visibility: hidden;
    position: fixed;
    z-index: 10000;
    top: 0;
    left: 0;
    right: 0;
}

更新的脚本:

var $header = $('#carouselExampleIndicators');
var $navBar = $('.nav');
var $rlogo = $('.r-logo-menu-desktop');

$(window).scroll(function() {

    var headerPos = $header.height();
    var scrollPos = $(this).scrollTop();

    if (scrollPos >= headerPos)
    {
        $navBar.addClass('fixed');
        $rlogo.addClass('show');
    }
    else
    {
        $navBar.removeClass('fixed');
        $rlogo.removeClass('show');
    }

});

【问题讨论】:

  • 我在 Firefox / Edge 中看到的不正确? imgur.com/a/I7BKVOG
  • PS:问题不在于 Firefox。我在 Chrome 中找到了这个 :)
  • 代码对我来说很好用。但输入 id:#carouselExampleIndicators-custom

标签: javascript html css


【解决方案1】:

编辑:试试这样。因为标题正在改变高度,所以您需要获取它的位置。

var $header = $('#carouselExampleIndicators-custom');
var $navBar = $('.nav');
var $rlogo = $('.r-logo-menu-desktop');

$(window).scroll(function() {

    var headerPos = $header.height();
    var scrollPos = $(this).scrollTop();

    if (scrollPos >= headerPos)
    {
        $navBar.addClass('fixed');
        $rlogo.addClass('show');
    }
    else
    {
        $navBar.removeClass('fixed');
        $rlogo.removeClass('show');
    }

});
html,body{margin:0;padding:0}
body{font-size:0;height:1920px}
img{width:100%}
.r-logo-menu-desktop{visibility:hidden}
.r-logo-menu-desktop.show{visibility:unset}
#carouselExampleIndicators-custom{display:block;background:#a3b0b0}
.nav{display:block;background:#cad7d7;padding:8px}
.nav.fixed{position:fixed;width:100%;top:0}
ul{margin:0;padding:0;list-style:none;font-family:Arial;font-size:24px}
ul li{display:inline}
<html>
<head>
  <script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
</head>
<body>
  <header id="carouselExampleIndicators-custom"><img src="https://www.lagaleramagazine.es/rucab/img/1400_slider1.jpg"></header>
    <nav class="nav">
      <ul>
        <li><span class="r-logo-menu-desktop">R</span></li>
        <li>Home</li>
        <li>About</li>
        <li>Contact</li>
      </ul>
    </nav>
  </body>
</html>

【讨论】:

  • 我尝试了它(第一个代码块)并且几乎可以工作,当偏移量与导航相交时,它在 Firefox 上正确连接。问题是当我滚动到顶部时,菜单没有恢复到原始位置,它会永远堆叠到窗口的顶部。
  • 是的,但是你需要在body上设置一个静态高度,比如1920px,有什么办法可以避免吗?并将高度设置为自动。因为...如果高度超过 1920px,会发生什么?
  • 是的,但是你需要在body上设置一个静态高度,比如1920px,有什么办法可以避免吗?并将高度设置为自动。因为...如果高度超过 1920px,会发生什么?
  • 我放了高度,因为我没有显示滚动的内容。如果可行,请仅尝试 JQuery 代码。
  • 您的带有类和 id 的代码不起作用,我使用了您在更新的答案中看到的代码并且它起作用了,我不知道它是否可以是一个有效的解决方案,可以你检查一下?谢谢。
猜你喜欢
  • 1970-01-01
  • 2011-10-07
  • 1970-01-01
  • 2013-02-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-01-22
相关资源
最近更新 更多