【问题标题】:jQuery scrollTo not working Chrome/FirefoxjQuery scrollTo 不工作 Chrome/Firefox
【发布时间】:2015-07-04 06:47:02
【问题描述】:

如果有人问过这个问题,请原谅我,但我在这里搜索了一整天,没有看到任何与我的具体问题有关的问题。

我正在构建一个带有导航栏的单页视差式网站,该网站利用固定位置允许用户快速跳转到页面的不同部分。

目前我正在尝试实现 scrollTo jQuery 插件 (flesler/jquery.scrollTo - Github) 以提供漂亮流畅的动画滚动效果。

这是我实现的第 5 或第 6 个不同的 jQuery 方法,以使此效果无法成功。 scrollTo 方法似乎是最接近工作的方法,但它仍然不起作用。

它在 Chrome 42.0.2311.90 上根本不起作用 它在 Firefox 37.0.2 上根本不起作用 它确实适用于 Safari 5.1.10,但我无法检查最新版本的 Safari。此外,该网站还没有在 Safari 5.1.10 上正确呈现。我也无法使用 IE 访问计算机。

测试地点位于http://revolt-designs.com/parallax/

这是我调用脚本的方式:

$(document).ready(function(){
    $('#nav-links li a').click(function() {
        $.scrollTo($(this).attr('href'), {duration: 3000});
    });
});

链接的格式是这样的:

<div id="nav">
    <ul id="nav-links">
        <li><a href="#group2">About</a></li>
        <li><a href="#group4">News</a></li>
        <li><a href="#group6">Events</a></li>
        <li><a href="#group7">Contact</a></li>
    </ul>
</div>

为了简单起见,锚点指向页面上的div,即:

<!-- GROUP 2 -->
<div id="group2" class="parallax__group">   
    <div class="parallax__layer parallax__layer--base">
        Lorem Ipsum
    </div>      
</div><!-- end GROUP 2 -->

希望有人能抓住一些我错过的小而容易的东西。谢谢。需要明确的是,我并不是要替代我正在使用的脚本。我正在寻求帮助,以找出阻止任何平滑滚动脚本在我的网站上运行的根本问题。

【问题讨论】:

  • 为了简单起见,试着看看这支笔,也许在没有库的情况下实现它codepen.io/mccell/pen/DdyKl
  • 我用那支笔中的 sn-p 替换了我当前使用的 scrollTo,但它不起作用。它实际上使情况变得更糟,因为现在它甚至根本不会退回到跳到 div 上。使用 scrollTo 脚本,它不会顺利进行,但至少会跳转到 div。您可以在测试站点看到它的实际效果。
  • 您是否更改了 HTML 结构?

标签: javascript jquery html google-chrome scrollto


【解决方案1】:

这个sn-p需要jquery和jquery UI,如果不想包含jquery UI可以去掉最后的缓动部分

    $(document).ready(function(){
  $('#nav ul li a').on('click', function(e) {
    e.preventDefault();
    var target = $(this).attr('href');

    //changing the value of offsetValue will help account for fixed headers or whatever.
    //EDIT: used data-offset to allow for multiple offsets defualt is 0.

    offsetValue = $(this).data('offset') | 0;

    $('html, body').animate({
      scrollTop: $(target).offset().top-offsetValue
     },
     {
      duration: 2000,
      easing: "easeOutQuint"  
      });
    //number at the end here changes the speed, slower = higher
  });
});

【讨论】:

  • 我很感激,但我并不是要我尝试使用的替代脚本。正如我的问题所述,我尝试了 5 或 6 个不同的脚本,但均未成功。网站代码中的某些内容导致平滑滚动脚本无法正常工作,因此我正在寻求帮助以找到解决此潜在问题的方法。
  • 您是否包含必要的库?我敢打赌,其中一些需要 jquery UI,尤其是在使用缓动时
【解决方案2】:

更改代码以在 .parallax 元素上滚动:

$(document).ready(function() {
    $('#nav-links li a').click(function() {
        $('.parallax').scrollTo($(this).attr('href'), {duration: 3000});
    });
});

Here is a fiddle(使用您网页中的 HTML)


为了浏览器的兼容性,您可以考虑将您的 css 中的height: 100vh; 改为使用.height()

$(document).ready(function() {
    height = $(window).height();
    $('.parallax').css('height',height);
    $('#nav-links li a').click(function() {
        $('.parallax').scrollTo($(this).attr('href'), {duration: 3000});
    });
});

【讨论】:

  • 非常感谢!这完美地解决了我的问题。至于高度的浏览器兼容性,您是否建议我从我的 CSS 中完全删除 height: 100vh;,或者只是添加 jQuery 脚本?
  • vh 实际上似乎有full browser compatibility,所以无论哪种方式你都应该是安全的。如果您确实开始注意到它的问题,至少您知道还有另一种获取视口高度的方法:-)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-08-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多