【问题标题】:jQuery smooth scroll to a div using animatejQuery使用动画平滑滚动到div
【发布时间】:2023-03-23 11:22:02
【问题描述】:

概述: 我正在使用锚标签滚动到它们各自在 href 中分配的 div。

HTML 标记:

<ul class="nav navbar-nav">
    <li><a href="#howToUse">How to use</a></li>
    <li><a href="#benefits">Benefits</a></li>
</ul>

<div id="howToUse">
     Some content
</div>

<div id="benefits">
     Some content
</div>

jQuery:

$('ul.nav').find('a').click(function(){
    var $href = $(this).attr('href');
    var $anchor = $('#'+$href).offset();
    $('body').animate({ scrollTop: $anchor.top },'slow');
    return false;
});

问题: 因此,现在当我单击锚标记时,窗口会滚动到特定的 div,但滚动并不顺畅或缓慢。我宁愿说它根本不滚动。它只是跳转到那个 div。

我使用了 animate 并且还使用了参数 slow 。那么,我的错误是什么?我怎样才能实现我在这里寻找的平滑滚动。

网站

http://irankmedia.com/uskincare/

您好,请检查本网站的导航栏,它没有给我预期的平滑滚动效果。

希望它会带来一个清晰的想法。

【问题讨论】:

  • 试试$('ul.nav').find('a').click(function(e){e.preventDefault();
  • @Kiran Kumar Dash 语法错误,无法识别的表达式:##howToUse 会因为 $('#'+ $href) 而出现

标签: jquery


【解决方案1】:

问题是$('#'+ $href).offset();,因为href本身有#,所以会抛出类似Uncaught Error: Syntax error, unrecognized expression: ##howToUse的错误

$('ul.nav').find('a').click(function (e) {
    e.preventDefault();
    var target = $(this).attr('href');
    var $anchor = $(target).offset();
    $('body').stop().animate({
        scrollTop: $anchor.top
    }, 'slow');
});

演示:Fiddle

【讨论】:

  • 在我的情况下,它只是跳转到 div 而不是滚动。我的问题是它滚动不顺畅。那么,可能是什么原因?
  • @KiranKumarDash 因为有一个脚本错误,动画代码没有得到执行......所以锚点点击的默认动作正在发生 - 问题是jsfiddle.net/arunpjohny/dctnbo8c
  • 是的,我已经看到了解决方案,但在我的情况下不起作用
  • @KiranKumarDash 然后尝试重新创建小提琴中的错误......否则我们无能为力
  • 这是我正在尝试的网站:irankmedia.com/uskincare
【解决方案2】:

试试这个:

$('ul.nav').find('a').click(function() {
    var $href = $(this).attr('href');
    //var $anchor = $('#'+$href).offset();
    $('html, body').animate({
        scrollTop: $($href).offset().top
    }, 2000);
    return false;
});

演示here

【讨论】:

  • 仍然无法解决我的问题。它只是跳转到 div。我希望它能够顺利滚动。
  • 我看过你的代码。所以,我知道代码是正确的。但就我而言,它只是跳转到 div。
  • 是的。我看过你的demo。这是正确的。但在我的情况下,它无法平滑滚动的原因可能是什么。
  • 您的页面上肯定有对 jQuery 的引用?例如:
  • 是的,我有 jquery cdn url
【解决方案3】:

只需删除与 $href 一起使用的“#”,否则你的代码运行良好,伙计

$('ul.nav').find('a').click(function(){
    var $href = $(this).attr('href');
    var $anchor = $($href).offset();
    $('body').animate({ 
          scrollTop: $anchor.top 
    },'slow');
    return false;
});

它抛出语法错误,无法识别的表达式:##howToUse

【讨论】:

  • 谢谢。但滚动仍然不流畅。它只是跳转到 div。我希望它能够顺利滚动。
  • @Kiran Kumar Dash 您可以将“慢”更改为特定的毫秒数,例如 1000 或根据您的需要参考 **api.jquery.com/animate ** 了解如何应用动画速度
  • 这是我正在尝试的网站:irankmedia.com/uskincare
  • @Kiran Kumar Dash 由于某些原因我无法访问它你为什么不创建 jsfiddle .?这样我可以帮助你
  • 我确实解决了朋友。谢谢你。这只是一个愚蠢的错误。我错过了一个标签。
猜你喜欢
  • 2013-10-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-07-12
  • 1970-01-01
相关资源
最近更新 更多