Javascript 平滑滚动到内部链接的最佳方式
我已经搜索并看到了很多关于这个主题的例子,但我找不到最适合我的方法 我只是有点熟悉JS和jQuery,我想问一下平滑滚动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"&
<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);
});