Javascript 平滑滚动到内部链接的最佳方式

Javascript 平滑滚动到内部链接的最佳方式,javascript,jquery,scroll,anchor,smooth,Javascript,Jquery,Scroll,Anchor,Smooth,我已经搜索并看到了很多关于这个主题的例子,但我找不到最适合我的方法 我只是有点熟悉JS和jQuery,我想问一下平滑滚动 <a name="urunler"></a> <ul> <li><a href="#ppanjur" class="uruna">Plastik Panjur</a></li> <li><a href="#ipanjur" class="uruna"&

我已经搜索并看到了很多关于这个主题的例子,但我找不到最适合我的方法

我只是有点熟悉JS和jQuery,我想问一下平滑滚动

    <a name="urunler"></a>
<ul>
    <li><a href="#ppanjur" class="uruna">Plastik Panjur</a></li>
    <li><a href="#ipanjur" class="uruna">Alüminyum (İthal / Yalıtımlı) Panjur</a></li>
    <li><a href="#opanjur" class="uruna">Otomatik Panjur</a></li>
    </ul>
我有('click','a.uruna',function(),如何在这里插入另一个类,或者我应该写:

$(document).on('click', 'a.uruna', function () {
    scrollToElement($(this).attr('href'));
});
$(document).on('click', 'a.new', function () {
    scrollToElement($(this).attr('href'));
});
HTML:

HTML:

现场演示:

请注意,在这种情况下,您需要具有与链接的
href
标记中指定的元素相同的
id

function scrollToElement (selector) {
  $('html, body').animate({
    scrollTop: $(selector).offset().top
  }, 2000);    
};

$(document).on('click', 'a.uruna', function () {
    scrollToElement($(this).attr('href'));
});
现场演示:

请注意,在这种情况下,您需要具有与链接的
href
标记中指定的元素相同的
id

function scrollToElement (selector) {
  $('html, body').animate({
    scrollTop: $(selector).offset().top
  }, 2000);    
};

$(document).on('click', 'a.uruna', function () {
    scrollToElement($(this).attr('href'));
});

我注意到JohnJohnGa的回答让你得到了一个“闪烁”(至少对于Google Chrome来说是这样)页面立即弹出到锚href位置,然后在平滑滚动之前再次返回。这在快速的计算机上可能不明显,但在我正在使用的计算机上确实明显。为了避免这种情况,我做了以下操作:

$('a.page-scroll').bind('click', function(event) {
    var $anchor = $(this);
    $('html, body').stop().animate({
        scrollTop: $($anchor.attr('href')).offset().top
    }, 1500, 'easeInOutExpo');
    event.preventDefault();
    window.history.pushState(null, null, $($anchor.attr('href')).selector);
});

注意,这可以防止触发默认事件,然后使用
window.history.pushState
来模拟它。对于旧浏览器,它会滚动到正确的位置,但不会更新地址位置。

我注意到JohnJohnGa的回答会让你看到“闪烁”(至少对于Google Chrome而言)页面立即弹出到锚href位置,然后在平滑滚动之前再次返回。这在快速的计算机上可能不明显,但在我正在使用的计算机上确实明显。为了避免这种情况,我做了以下操作:

$('a.page-scroll').bind('click', function(event) {
    var $anchor = $(this);
    $('html, body').stop().animate({
        scrollTop: $($anchor.attr('href')).offset().top
    }, 1500, 'easeInOutExpo');
    event.preventDefault();
    window.history.pushState(null, null, $($anchor.attr('href')).selector);
});

注意,这会阻止触发默认事件,然后使用
window.history.pushState
来模拟它。对于旧浏览器,它会滚动到正确的位置,但不会更新地址位置。

无法使用此代码。你能解释部分内容或用演示来演示吗?很抱歉。我确信你的方法会工作,但我认为我必须导入jQuery。我不知道,从来没有使用过它。谢谢你的帮助。无法使用此代码。你能解释部分内容或演示一下吗?对不起。我相信你的方法会起作用,但我想我必须导入jQuery。我不知道,永远不要使用它。谢谢你的帮助。谢谢你的帮助。我想我必须导入jQuery为此。我不知道。正如我所说,我对JS和jQuery不太了解。导入并成功了,谢谢。这有什么意义?试图通过复制/粘贴别人的答案来赢得声誉?谢谢你的帮助。我想我必须为此导入jQuery。我不知道。正如我所说,我对JS和jQuery不太了解。导入和它成功了,谢谢。这有什么意义?试图通过复制/粘贴别人的答案来赢得声誉?
function scrollToElement (selector) {
  $('html, body').animate({
    scrollTop: $(selector).offset().top
  }, 2000);    
};

$(document).on('click', 'a.uruna', function () {
    scrollToElement($(this).attr('href'));
});
$('a.page-scroll').bind('click', function(event) {
    var $anchor = $(this);
    $('html, body').stop().animate({
        scrollTop: $($anchor.attr('href')).offset().top
    }, 1500, 'easeInOutExpo');
    event.preventDefault();
    window.history.pushState(null, null, $($anchor.attr('href')).selector);
});