JavaScript的“平滑滚动”不会滚动

问题描述:

问题背景:JavaScript的“平滑滚动”不会滚动

我正在开发使用Twitter的引导3的ASP.NET MVC项目中的单页网站。

问题:

即时通讯目前试图实现“平滑滚动”应该滚动到相关的分度,从导航栏点击下拉。在从导航栏下拉菜单中点击某个区段时,它会跳转到div而不是滚动。

代码:

这下面是我的“_Layout.cshtml”标记与提供导航栏和页脚。 JavaScript的滚动显示的脚本标记之间:

<!DOCTYPE html> 
<html> 
<head> 
<meta charset="utf-8" /> 
<meta name="viewport" content="width=device-width, initial-scale=1.0"> 
<title>@ViewBag.Title - My ASP.NET Application</title> 
@Styles.Render("~/Content/css") 
@Scripts.Render("~/bundles/modernizr") 
    <script> 
     $('#nav .navbar-nav li>a').click(function() { 
      var link = $(this).attr('href'); 
      var offSet = 30; 
      var targetOffset = $(link).offset().top - offSet; 
      $('html,body').animate({ scrollTop: targetOffset }, 7000); 
     }); 
</script> 
</head> 
<body> 
<div class="navbar navbar-fixed-top"> 

    <nav class="navbar navbar-default" role="navigation" id="nav"> 
     <div class="container"> 
      <!-- Brand and toggle get grouped for better mobile display --> 
      <div class="navbar-header"> 
       <button type="button" class="navbar-toggle collapsed" data-toggle="collapse" data-target="#bs-example-navbar-collapse-1"> 
        <span class="sr-only">Toggle navigation</span> 
        <span class="icon-bar"></span> 
        <span class="icon-bar"></span> 
        <span class="icon-bar"></span> 
       </button> 
       <a class="navbar-brand" href="/"><img src="images/logo.png" alt="yourLogo"></a> 
      </div> 

      <!-- Collect the nav links, forms, and other content for toggling --> 
      <div class="collapse navbar-collapse" id="bs-example-navbar-collapse-1"> 
       <ul class="nav navbar-nav"> 
        <li class="active"><a href="#">Link</a></li> 
        <li class="dropdown"> 
         <a href="#" class="dropdown-toggle" data-toggle="dropdown">Dropdown <span class="caret"></span></a> 
         <ul class="dropdown-menu" role="menu"> 
          <li><a href="#myCarousel">Projects</a></li> 
          <li><a href="#Welcome">Welcome</a></li> 
          <li><a href="#features">Thing</a></li> 
          <li><a href="#About">About Me</a></li> 
          <li><a href="#Location">Location</a></li> 
          <li><a href="#Contact">Contact Me</a></li> 
         </ul> 
        </li> 
       </ul> 
      </div><!-- /.navbar-collapse --> 
     </div><!-- /.container-fluid --> 
    </nav> 
</div> 

<div class="container body-content"> 
    @RenderBody() 
</div> 

<footer> 
    <!-- This HTML is outside the other container above i.e its separate. You need a container as this allows you to use bootstrap classes --> 
    <div class="container"> 
     <div class="row"> 
      <div class="col-sm-2"> 
       <h6>Copyright &copy; 2014</h6> 
      </div> 

      <div class="col-sm-4"> 
       <h6>About Us</h6> 
       <p>Chia dreamcatcher artisan vinyl Intelligentsia Banksy. Art party whatever cred wolf hella distillery Portland wayfarers Kickstarter, kale chips pug artisan +1 crucifix.</p> 
      </div> 

      <div class="col-sm-2"> 
       <h6>Navigation</h6> 
       <ul class="unstyled"> 
        <li><a href="#">Home</a></li> 
        <li><a href="#">Services</a></li> 
        <li><a href="#">Links</a></li> 
        <li><a href="#">Contact</a></li> 
       </ul> 
      </div> 

      <div class="col-sm-2"> 
       <h6>Follow Us</h6> 
       <ul class="unstyled"> 
        <li><a href="#">Twitter</a></li> 
        <li><a href="#">Facebook</a></li> 
        <li><a href="#">Google Plus</a></li> 
       </ul> 
      </div><!-- end col-sm-2 --> 

      <div class="col-sm-2"> 
       <h6>Coded with<span class="glyphicon glyphicon-heart"> by Me</span></h6> 


      </div> 
     </div> 
    </div> 
</footer> 
</body> 


@Scripts.Render("~/bundles/jquery") 
@Scripts.Render("~/bundles/bootstrap") 
@RenderSection("scripts", required: false) 

截图:

下面的截图显示,导航栏选项,当单击页转到正确的DIV,但它不会滚动。任何帮助解决这个问题都会很好。

enter image description here

+1

您需要阻止锚点的默认行为,否则浏览器将在您的事件处理程序运行之前获取'#whatever'哈希值并跳转页面。 – Mathletics 2014-10-16 20:26:31

尝试增加 “PX” 到scrollTop的:

$('#nav .navbar-nav li>a').click(function() { 
     var link = $(this).attr('href'); 
     var offSet = 30; 
     var targetOffset = $(link).offset().top - offSet; 
     $('html,body').animate({ scrollTop: targetOffset + "px" }, 7000); 
    }); 

或本:

$('#nav .navbar-nav li>a').click(function() { 
     var link = $(this).attr('href'); 
     var offSet = 30; 
     var targetOffset = $(link).offset().top - offSet; 
     $('html,body').animate({ scrollTop: targetOffset }, 'slow'); 
    }); 

我认为你需要执行它的页面加载后:

$(document).ready(function() { 
    $('#nav .navbar-nav li>a').click(function() { 
     var link = $(this).attr('href'); 
     var offSet = 30; 
     var targetOffset = $(link).offset().top - offSet; 
     $('html,body').animate({ scrollTop: targetOffset }, 'slow'); 
    }); 
}); 

<script> 
$(function() { 
    $('a[href*=#]:not([href=#])').click(function() { 
    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 
     }, 1000); 
     return false; 
     } 
    } 
    }); 
}); 
</script> 

来自[http://css-tricks.com/snippets/jquery/smooth-scrolling/]

+0

你明白这段代码的作用吗? – Mathletics 2014-10-16 20:25:06

+0

是的,当链接被点击而不是跳跃时,它使用动画和1000的速度。 – 2014-10-16 20:30:34

+0

但是这部分和OP所发布的没什么不同(速度除外,这不是问题)。 – Mathletics 2014-10-16 20:32:07

更多的研究和使用这个伟大的例子后:http://alijafarian.com/responsive-page-scrolling-with-jquery-and-bootstrap/我设法生产出低于该作品完美的解决方案。

<script> 

    $(document).ready(function() { 
     $('#nav .navbar-nav li>a').on('click', function(event){ 
      event.preventDefault(); 
      var sectionID = $(this).attr("href"); 
      scrollToID(sectionID, 750); 
     }); 

     function scrollToID(id, speed) 
     { 
      var offSet = 70; 
      var targetOffset = $(id).offset().top - offSet; 
      $('html,body').animate({scrollTop:targetOffset}, speed); 
     } 
     }); 
</script>