【问题标题】:jquery smooth scroll incorrect resultjquery平滑滚动不正确的结果
【发布时间】:2019-03-27 14:41:59
【问题描述】:

我正在尝试平滑滚动

但滚动条无法按预期工作,看起来平滑滚动,默认跳转到 # 同时工作

这是我的 HTML(引导带导航)

<nav class="navbar fixed-top navbar-expand-sm navbar-light bg-light mb-3" id="main-nav">
      <div class="container">
        <a class="navbar-brand" href="#">Navbar</a>
        <ul class="navbar-nav">
          <li class="nav-item">
            <a class="nav-link" href="#welcome">Welcome</a>
          </li>
          <li class="nav-item">
            <a class="nav-link" href="#about">About</a>
          </li>
          <li class="nav-item">
            <a class="nav-link" href="#services">Services</a>
          </li>
        </ul>
      </div>
    </nav>

这里是我的 js

<script>
    $('body').scrollspy({ 
      target: '#main-nav',
      offset: $('#main-nav').outerHeight()
    });

    // add smooth scrolling
    $('#main-nav a').on('click',(event) => {
      const sender = event.target; // sender 
      // check for a hash value
      if (sender.hash)
      {
        // prevent default behaviour
        event.preventDefault();

        // get sendar hash
        const hash = sender.hash;
        const navHeight = $('#main-nav').outerHeight();

        // animate smooth scroll
        $('html').animate({
          scrollTop: $(hash).offset().top - (navHeight + 1),
        },1500,() => {
          // add hash to URL after scroll
          this.location.hash = hash;
        });
      }
    });
  </script>

页面内容

<section id="welcome">
    <h3>Welcome</h3>
    <p>Lorem ipsum dolor sit amet consectetur adipisicing elit. Dicta eaque similique cupiditate! Pariatur, aliquid quae recusandae quidem atque cumque perspiciatis possimus quod repudiandae, labore nobis eius voluptatum! Impedit, sint in.
    </p>
</section>
<section id="about">
    <h3>About</h3>
    <p>Lorem ipsum dolor sit amet consectetur adipisicing elit. Dicta eaque similique cupiditate! Pariatur, aliquid quae recusandae quidem atque cumque perspiciatis possimus quod repudiandae, labore nobis eius voluptatum! Impedit, sint in.
    </p>
</section>
<section id="services">
    <h3>Services</h3>
    <p>Lorem ipsum dolor sit amet consectetur adipisicing elit. Dicta eaque similique cupiditate! Pariatur, aliquid quae recusandae quidem atque cumque perspiciatis possimus quod repudiandae, labore nobis eius voluptatum! Impedit, sint in.
    </p>
</section>

当我第一次单击nav 上的链接时,它会滚动导航栏到内容标题上(使我的标题消失)

但是当我再次点击相同的链接时,它会向上滚动一点并显示为我的预期结果

所以。任何人都知道如何解决此问题以使滚动在第一次点击时正常工作

谢谢。

【问题讨论】:

    标签: javascript jquery html css bootstrap-4


    【解决方案1】:

    这是您的更改代码,将padding-top:52px; 添加到section 元素并从$(hash).offset().top 中删除- (navHeight + 1)

    $('body').scrollspy({ 
          target: '#main-nav',
          offset: $('#main-nav').outerHeight()
        });
    
        // add smooth scrolling
        $('#main-nav a').on('click',(event) => {
          const sender = event.target; // sender 
          // check for a hash value
          if (sender.hash)
          {
            // prevent default behaviour
            event.preventDefault();
    
            // get sendar hash
            const hash = sender.hash;
            const navHeight = $('#main-nav').outerHeight();
    
            // animate smooth scroll
            $('html').animate({
              scrollTop: $(hash).offset().top,
            },1500,() => {
              // add hash to URL after scroll
              this.location.hash = hash;
            });
          }
        });
    section{
      min-height:500px;
      padding-top:52px;
    }
    #main-nav{
      position:fixed;
      width:100%;
      top:0px;
      background:#ffffff;
    }
    <link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/4.3.1/css/bootstrap.min.css">
    <script src="https://ajax.googleapis.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
    <script src="https://cdnjs.cloudflare.com/ajax/libs/popper.js/1.14.7/umd/popper.min.js"></script>
    <script src="https://maxcdn.bootstrapcdn.com/bootstrap/4.3.1/js/bootstrap.min.js"></script>
    <nav class="navbar fixed-top navbar-expand-sm navbar-light bg-light mb-3" id="main-nav">
          <div class="container">
            <a class="navbar-brand" href="#">Navbar</a>
            <ul class="navbar-nav">
              <li class="nav-item">
                <a class="nav-link" href="#welcome">Welcome</a>
              </li>
              <li class="nav-item">
                <a class="nav-link" href="#about">About</a>
              </li>
              <li class="nav-item">
                <a class="nav-link" href="#services">Services</a>
              </li>
            </ul>
          </div>
        </nav>
        
        <section id="welcome">
        <h3>Welcome</h3>
        <p>Lorem ipsum dolor sit amet consectetur adipisicing elit. Dicta eaque similique cupiditate! Pariatur, aliquid quae recusandae quidem atque cumque perspiciatis possimus quod repudiandae, labore nobis eius voluptatum! Impedit, sint in.
        </p>
    </section>
    <section id="about">
        <h3>About</h3>
        <p>Lorem ipsum dolor sit amet consectetur adipisicing elit. Dicta eaque similique cupiditate! Pariatur, aliquid quae recusandae quidem atque cumque perspiciatis possimus quod repudiandae, labore nobis eius voluptatum! Impedit, sint in.
        </p>
    </section>
    <section id="services">
        <h3>Services</h3>
        <p>Lorem ipsum dolor sit amet consectetur adipisicing elit. Dicta eaque similique cupiditate! Pariatur, aliquid quae recusandae quidem atque cumque perspiciatis possimus quod repudiandae, labore nobis eius voluptatum! Impedit, sint in.
        </p>
    </section>

    【讨论】:

      【解决方案2】:

      https://codepen.io/Vikaspatel/pen/jJZOYQ

      请检查这可能是你得到一些帮助...

      		function div_slider(){
      			$('ul li a').on('click', function(e){
      				e.preventDefault();
      				$('ul li a').removeClass('active');
      				$(this).addClass('active');
      				var attrval = $(this.getAttribute('href'));
      				$('html,body').stop().animate({
      					scrollTop: attrval.offset().top
      				}, 1000)
      			});
      		}

      【讨论】:

        【解决方案3】:

        您可以使用下面的代码轻松且非常流畅地制作 easing scrollspy

        <ul class="navigation clearfix">
            <li class=" "><a class="js-scroll-trigger nav-link" href="#home">Home</a></li>
            <li><a class="js-scroll-trigger nav-link" href="#about">About Us</a></li>
            <li><a class="js-scroll-trigger nav-link" href="#amenities">Amenities</a></li>
            <li><a class="js-scroll-trigger nav-link" href="#plan">Floor Plan</a></li>
            <li><a class="js-scroll-trigger nav-link" href="#location">Location</a></li>
            <li><a class="js-scroll-trigger nav-link" href="#contact">Contact Us</a></li>
        </ul>
        
        
        <script src="http://gsgd.co.uk/sandbox/jquery/easing/jquery.easing.1.3.js"></script>
        <script> (function ($) 
            { "use strict"; 
                $('a.js-scroll-trigger[href*="#"]:not([href="#"])').click(function () 
                { 
                    $('a.js-scroll-trigger').removeClass('active') 
                    $(this).addClass('active'); 
                    if (location.pathname.replace(/^\//, '') == this.pathname.replace(/^\//, '') && location.hostname == this.hostname) 
                    { 
                        var target = $(this.hash); 
                        target = target.length ? target : $('[name=' + this.hash.slice(1) + ']'); 
                        if (target.length) 
                        { 
                            $('html, body').animate({ scrollTop: (target.offset().top - 72) }, 1000, "easeInOutExpo"); 
                            return false; 
                        } 
                    } 
                }); 
            })(jQuery); 
        </script>
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2012-05-20
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2018-05-16
          相关资源
          最近更新 更多