【问题标题】:Smooth scrolling end positioning平滑滚动端定位
【发布时间】:2012-01-17 17:30:55
【问题描述】:

我有一个非常流畅的动画滚动条,它会根据您在导航上单击的内容上下移动(感谢CSS-Tricks!)。现在这一切都很好,但我有一个导航贴在浏览器窗口的顶部,当它向下滚动时会妨碍部分标题。我一辈子都找不到任何人可能对一个非常简单的函数有类似的问题。

这是我粘贴到 HTML 中的 JS:

<script type="text/javascript">
$(document).ready(function() {
  function filterPath(string) {
  return string
    .replace(/^\//,'')
    .replace(/(index|default).[a-zA-Z]{3,4}$/,'')
    .replace(/\/$/,'');
  }
  var locationPath = filterPath(location.pathname);
  var scrollElem = scrollableElement('html', 'body');

   $('a[href*=#]').each(function() {
    var thisPath = filterPath(this.pathname) || locationPath;
    if (  locationPath == thisPath
    && (location.hostname == this.hostname || !this.hostname)
    && this.hash.replace(/#/,'') ) {
      var $target = $(this.hash), target = this.hash;
      if (target) {
        var targetOffset = $target.offset().top;
        $(this).click(function(event) {
          event.preventDefault();
          $(scrollElem).animate({scrollTop: targetOffset}, 800, function() {
            location.hash = target;
          });
        });
      }
    }
  });

  // use the first element that is "scrollable"
  function scrollableElement(els) {
    for (var i = 0, argLength = arguments.length; i <argLength; i++) {
      var el = arguments[i],
          $scrollElement = $(el);
      if ($scrollElement.scrollTop()> 0) {
         return el;
      } else {
        $scrollElement.scrollTop(1);
        var isScrollable = $scrollElement.scrollTop()> 0;
        $scrollElement.scrollTop(0);
        if (isScrollable) {
          return el;
        }
      }
    }
    return [];
  }

});</script>

所以我正在学习 JS 和 JQuery,所以我感谢大家的耐心等待,并期待听到你的 cmets。

非常感谢。

编辑:这是我的测试站点:test

【问题讨论】:

  • 我不觉得你发布的 JS 很有帮助。您提到了一个阻碍了导航的导航,那么当它阻碍时它的当前 CSS 属性是什么?(如果您知道的话)可能阻碍了它?
  • @Matthew 道歉,在看了几个小时的代码后,我昨晚失去了打字的意愿 :) 这是我的测试页面:nathanlangley.co.uk/main_site_6/index.html 你可以看到什么时候您在导航上选择“图库”,标题部分被导航遮挡。我确信有一个值需要修改,但我在这段代码中看不到。谢谢。

标签: javascript jquery html scroll smooth-scrolling


【解决方案1】:

获取 jquery.scrollTo.js 的副本 来自http://flesler.blogspot.com/2008/09/jqueryscrollto-14-released.html

这是控制滚动项的位置

 $.scrollTo( 0, 500); 

如果您设置更高的数字,则 0 将位于页面顶部 它会将您带到页面下方,在我的示例中,我有 5 个要滚动到的部分。根据需要进行更改。

我在头部使用了这个:

 <script src="http://ajax.googleapis.com/ajax/libs/jquery/1.3.2/jquery.js" type="text/javascript"></script>


 <script type="text/javascript" src="javascripts/jquery.scrollTo.js"></script>
 <script type="text/javascript">
 $(document).ready(function()
 {
 // scroll to top
 $('a.topOfPage').click(function(){
 $.scrollTo( 0, 500);
 return false;
 });
 // scroll to top
 $('a.twoOfPage').click(function(){
 $.scrollTo( 570, 500);
 return false;
 });
 // scroll to top
 $('a.threeOfPage').click(function(){
 $.scrollTo( 1175, 500);
 return false;
 });
 // scroll to top
 $('a.fourOfPage').click(function(){
 $.scrollTo( 1790, 500);
 return false;
 });
 // scroll to top
 $('a.fiveOfPage').click(function(){
 $.scrollTo( 2385, 500);
 return false;
 });
 });
 </script>

在body部分对应nav:

 <ul class="pagination">

   <li><a href="" class="topOfPage">1</a></li>
   <li><a href="" class="twoOfPage">2</a></li>
   <li><a href="" class="threeOfPage">3</a></li>
   <li><a href="" class="fourOfPage">4</a></li>
   <li><a href="" class="fiveOfPage">5</a></li>

 </ul>  

如果您需要更多参考,我通过以下方式找到了原始代码 http://nick.boldison.com/websites/jquery/jquery-scroll-to-top-animation-scrollto-plugin/

希望对你有帮助。

干杯 V

【讨论】:

  • 嗨 V 感谢您的回复。我不认为我解释得很好。如果您查看我的测试site 并缩小浏览器(假设您有更大的屏幕)选择“推荐”,您就会明白我的意思了。滚动效果很好,但粘性导航覆盖了标题。
  • 嘿 - 我知道您希望“标题”从较低的位置开始,这样导航叠加层就不会在顶部重叠。如果是这样,上面的代码将让您定位您滚动到的页面向下的距离。我的工作也遇到了同样的问题,我有一个像你一样的固定导航顶部,它会完全按照你的网站正在做的事情。
  • 我已经为您提供了示例link 和压缩文件夹link 以及使用的代码。
  • 抱歉这么久才回复,现在就试试吧!
  • 你我的朋友是个传奇。工作了一个款待。非常感谢您花时间帮助我解决这个问题。欣赏它! :)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-05-31
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多