嘿!在你深入研究基于 JavaScript 的平滑滚动之前,要知道为此有一个原生的 CSS 功能:scroll-behavior
。
html {
scroll-behavior: smooth;
}
而且,在你使用 jQuery 等库来帮助你之前,也存在一个平滑滚动的原生 JavaScript 版本,例如这样
// Scroll to specific values
// scrollTo is the same
window.scroll({
top: 2500,
left: 0,
behavior: 'smooth'
});
// Scroll certain amounts from current position
window.scrollBy({
top: 100, // could be negative value
left: 0,
behavior: 'smooth'
});
// Scroll to a certain element
document.querySelector('.hello').scrollIntoView({
behavior: 'smooth'
});
Dustan Kasten 为此提供了一个 polyfill。并且你可能只会在你使用滚动页面来完成无法使用 #target 跳转链接和 CSS 完成的操作时才会用到它。
平滑滚动的可访问性
无论你使用哪种技术进行平滑滚动,可访问性都是一个需要关注的问题。例如,如果你点击一个 #hash
链接,浏览器的原生行为是将焦点更改到与该 ID 匹配的元素。页面可能会滚动,但滚动是焦点更改的副作用。
如果你覆盖了默认的焦点更改行为(你必须这样做才能防止立即滚动并启用平滑滚动),你需要自己处理焦点更改。
Heather Migliorisi 在 平滑滚动和可访问性 中写到了这一点,并提供了代码解决方案。
使用 jQuery 实现平滑滚动
jQuery 也可以做到这一点。以下是在同一页面上执行到锚点的平滑页面滚动的代码。它内置了一些逻辑来识别这些跳转链接,而不是目标其他链接。
// Select all links with hashes
$('a[href*="#"]')
// Remove links that don't actually link to anything
.not('[href="#"]')
.not('[href="#0"]')
.click(function(event) {
// On-page links
if (
location.pathname.replace(/^\//, '') == this.pathname.replace(/^\//, '')
&&
location.hostname == this.hostname
) {
// Figure out element to scroll to
var target = $(this.hash);
target = target.length ? target : $('[name=' + this.hash.slice(1) + ']');
// Does a scroll target exist?
if (target.length) {
// Only prevent default if animation is actually gonna happen
event.preventDefault();
$('html, body').animate({
scrollTop: target.offset().top
}, 1000, function() {
// Callback after animation
// Must change focus!
var $target = $(target);
$target.focus();
if ($target.is(":focus")) { // Checking if the target was focused
return false;
} else {
$target.attr('tabindex','-1'); // Adding tabindex for elements not focusable
$target.focus(); // Set focus again
};
});
}
}
});
如果你使用了这段代码,并且你像 HEY WHAT’S WITH THE BLUE OUTLINES?! 一样,请阅读上面关于可访问性的内容。
React 中的平滑滚动
James Quick 提供了一个关于如何使用 react-scroll
插件在 React 中实现平滑滚动的不错的 分步教程
<Link
activeClass="active"
to="section1"
spy={true}
smooth={true}
offset={-70}
duration={500}
>
我爱你!!!! 我几个月来一直在试图找到如何做到这一点! :-)
效果很好..非常感谢。
非常感谢您提供此脚本。花了我一段时间,但我让它工作了!
参考 URL 现在显示 404 页面。知道还有哪里有与 JS 匹配的 HTML 吗?……最好是用英语? :)
创建了一个新的参考 URL。
我做到了!
JS 已更改,并且解释在 JS 文件中……
http://codepen.io/HZaccaro/pen/zvrgLb/
很棒的代码,一个问题,
我的视频、存档和标签有一个侧边栏小部件,此代码正在干扰它。禁用这种情况的编码/标记是什么?
你可以尝试使用 jQuery noConflict 技术。在这里阅读相关信息:https://api.jqueryjs.cn/jQuery.noConflict/
我无论如何都无法让它工作,尽管我完全按照示例操作了……有没有人有什么想法?
如果没有你的问题描述或 URL,没有人能够帮助你。
我唯一能说的是确保你正在加载 jquery 库。
嗨,我对 JS 一无所知,但如果你在
<head>
和</head>
之间复制它,它就会起作用并且你想要定位的所有元素都必须像这样
我想它会起作用……
谢谢 SquirFly,
你的代码运行良好。我在 wordpress 3.8 中使用了它
确保你将上述脚本放在标签内。
我意识到这已经晚了 5 年,但是……使用更新版本的 jQuery (2.2),你需要在伪选择器中添加引号
换句话说,更改此部分
a[href=#]:not([href=#])
为此:
a[href=’#’]:not([href=’#’])
SquirFly 的代码非常棒!谢谢!
SquirFly,非常感谢!第一次就成功了!!=D
在我的网站上,IE8 上不起作用,我认为存在某种错误……
你能在 这里 使用 IE8 查看吗?谢谢
这是否也适用于左右?
只需将“top”更改为“left”即可?
太棒了!谢谢
我在我的网站上使第二种方法生效了,但我也尝试通过像这样将其添加到代码中来使导航容器跟随页面
$(‘html,body,#nav’)
因此我只是在此处的选择器中添加了 #nav。但它不起作用。页面仍在滚动,但导航容器没有跟随。有什么想法吗?
#nav 是否是绝对定位的 [相对于 body] 或固定的?这可能是原因。
完美运行
嗨,Chris,这太棒了!非常简单和干净,而且效果很好。
我想知道是否可以获取浏览器窗口当前 URL 中的哈希链接(即 http://www.example.com#target3),同时保留平滑滚动效果,以便每个哈希链接都可以添加书签。
谢谢!
技巧 #1 允许你保留哈希链接,而技巧 #2 则不会。
两个示例都运行良好。
有趣的是,我似乎在使用这两种技巧时都丢失了附加到 URL 的哈希链接。
我稍微修改了一下这个滚动到页面加载时的代码?我的想法是在 PHP 中检查引用,并且只有在他们点击了来自该域的链接时才滚动页面。目前我有
网站
感谢 Chris!我试图用 Jquery.LocalScroll 来实现这个功能,这太简单了!!帮我省去了很多麻烦,谢谢。
我有一个 div,其宽度为:100%,高度为:100%,还有一个 div,其左侧为:100%,宽度为:100%,因此主体为 200%,如何使滚动水平移动?
我修改了一些部分,你没有解释.. 比如你期望有一个对应的元素 ID 和与 a.href 相同的 ID.. 所以我修改了这个
var target = $(this).attr(“href”);
为
var target = $(this).attr(“href”).replace(‘#’,”);
以及这个
scrollTop: $(target).offset().top
为
scrollTop: $(‘a[name=’+target+’]’).offset().top
PS。继续努力。
是的,这是一个很好的观点 - 我自己无法使其工作,并且在第一眼没有弄清楚,但这一点很重要
还需要存在具有与哈希值对应的 ID 的元素。
例如
使用该方法的人
<a href=”#test”>转到哈希</a>
并在你的代码中
<a name=”test”>尝试到达这里</a>
以上代码无法实现此功能,
我自己修改了这一行
var $target = $(this.hash), target = this.hash;
为
var target = this.hash;
var $target = $j(this.hash).length>0?$j(this.hash):($j(‘a[name=’+target.replace(/#/,”)+’]’));
这样,它就可以同时使用 ID 和 A name=… 版本。
你好,
我试图让它工作,但无论如何都做不到。据我所知,我已经检查了参考并完全复制了... 任何帮助表示感谢。
http://www.certohost.com/tutorials.php
谢谢。
嗨,
我使用了技巧 #2,它似乎只在我点击“关于”时起作用,而“工作”和“联系”链接似乎不起作用,我不知道为什么。
谢谢
太棒了,运行得非常出色。几乎不用做任何事情。感谢 Chris
太棒了,完美运行。
谢谢!
你好..
只是想知道你是否在 Opera 中检查过这个... 在运行一些测试时得到了一些奇怪的结果... 尽管如此,它仍然很棒。
嗨 Chris 和其他人。
当我使用这种方法 #2 时,我的 Firefox 开发人员工具栏显示以下 js 错误
在属性选择器中预期标识符或字符串值,但发现“#”。
我错过了什么..?
为了提供帮助,我正在使用 jquery-1.4.2.min.js,并且我正在链接到具有 id 的 h2,如下所示
转到 01
这是链接 01
提前感谢。
抱歉,忘记包装我的代码了
<a href="#link-01">转到 01</a>
<h2 id="link-01">这是链接编号 01</h2>
谢谢
Jon
运行得非常完美!非常感谢!
感谢 Chris。
这在 Firefox 和 Safari 中完美运行,但在 Opera 中却不行。我还没有测试 IE。Opera 有什么修复方案吗?它目前跳转到 #tag,没有滚动。
IE 有什么已知问题和修复方案吗?
仅供参考,我使用了技巧 #2。
这在 Firefox 中运行完美,但在 Safari 中使用第二种方法时显示一些错误,有什么解决方案或指南吗?谢谢
感谢这篇文章,我一直试图让类似的功能工作好几年了。有什么想法可以更改滚动速度吗?
你是否已经想出如何更改滚动速度的方法?我也想这样做。
在这一行
将数字从 400 增加/减少到任何你想要的数字,以达到所需的滚动速度。例如,我将此数字增加到 1600 以达到我想要的效果。
感谢 Chris 提供这段很棒的代码!
它就在脚本中。查找“1000”这个数字。将其替换为 1500,速度就会相应减慢。如果将其设为 500,速度就会降低一半。
我也将滚动速度提高到了“1500”。但对我来说仍然不起作用。
我过去常常为此功能获取本地滚动。你的代码运行得也很好。谢谢。
演示地址
http://jsfiddle.net/KRmJG/
在使用 jQuery LocalScroll 遇到麻烦后,我立即让这个代码运行起来。
感谢发布该链接,我遇到一个奇怪的问题,即在点击时,页面会开始滚动,然后在中途会跳转到锚点。你的修改解决了这个问题。
这看起来简洁易懂!
我看到其他人之前也问过这个问题。
我也在尝试为我正在开发的一个水平网站寻找解决方案。
可以修改此代码以在这种情况下工作吗?
任何提示都将非常有帮助…
好的… 谢天谢地,这并没有花费太多时间来解决。
使用第二种方法,我使用了这段代码,并且它起作用了
感谢这个!
在过去的几天里,我一直在测试大量不同的平滑滚动代码,这些代码似乎是最直接和最易于实现的。我是一名设计师,而不是程序员,因此越简单越好。很棒的东西。
只有一个问题。我注意到 Fumie 询问了是否要在 URL 中显示哈希链接,Michal Kopanski 指出技巧 #1 允许你保留哈希链接,而技巧 #2 则不会。
我在 #1 中遇到的问题是我无法从不同的页面链接到哈希链接(例如,从主页到类似“about#sometag”的链接)。是否有办法在使用技巧 #2 时显示哈希链接?
我的页面上有一些外部锚链接,在使用脚本后它们不再起作用了 :-(
Chris Coyer 当选总统!
如果你想阻止动画“排队”,请替换这一行
$('html,body').animate({
为
$(‘html,body’).stop().animate({
太棒了!!!
非常感谢,我的网站现在看起来好多了,你的代码太好用了!
亲亲
这很棒,但我不想让顶部是浏览器顶部……
我在顶部有一个固定的头部,我想让它滚动的点在头部底部。
无论我做什么,它总是会将锚点滚动到浏览器的最顶部:(
有没有办法实现这个功能?
我遇到了完全相同的问题.. 有人有解决方案吗?!我正在使用带有固定头部的锚点,当我点击指向锚点的链接时,它会将它们向上滚动到固定头部的后面。我已经尝试了一些不同的方法,但可惜,没有成功..
任何帮助我都会非常感激!!
Jez(和 Russell),
回复可能有点晚了。我也使用固定头部。您只需调整滚动到的位置即可。Chris 和 Devin 的解决方案都使用 target.offset().top 作为目标垂直位置。在进行滚动之前,您可以从中减去固定头部的 height。
var target_pos = (target.length > 0) ? target.offset().top : 0;
var fhdr = $(‘your-fixed-header-selector’);
var fhdr_height = (fhdr.length > 0) ? fhdr.outerHeight() : 0;
target_pos -= fhdr_height;
if (target_pos > 0) {
$(‘html,body’).animate({
scrollTop: target_pos
}, 1000);
return false;
}
大家好,
只是想指出脚本 1 可能会在您链接到当前页面以外的其他页面的 # 锚点时给您带来问题。
如果链接在同一页面上,则 jQuery 工作正常。
如果有人知道启用 # 链接到其他页面的解决方案,那就太好了!
谢谢
感谢您的脚本。我只有一个问题:**为什么不使用 URL 中的锚文本?**它有什么好处吗?在我看来,它只会降低用户体验。感觉就像在 Flash 中工作。 :)
对同样的事情感到好奇……
我们使用的内容管理系统有时需要链接到其他页面的链接中的锚点。我很想能够关闭此选项,但我担心我们被困住了!
唉,以上两个脚本不适用于此类链接
http://www.mysite.com/otherpage.html#someanchor
第一种方法使用分离的函数显得有点繁琐,所以我将其集成到 bind 命令中作为回调函数。似乎工作得很好,尽管我只在 Chrome 和 IE7 中测试过它。
你好!
我在上面的代码中遇到了一个问题,其中向上平滑滚动不起作用。我尝试了你的代码,它在 Chrome、IE9、FF 和 Opera 中都能正常工作!非常感谢您分享。
@Chris McClean – 非常感谢您提供此脚本!我一直在尝试查找一个可以滚动页面的“链接锚点”脚本,但它也不会干扰 href 中单独包含哈希 (#) 符号的 href(因为这些类型的 href 通常与其他 JS 函数一起使用)。你太棒了! :)
@ Chris McClean – 您的 JS 我遇到一个问题……当页面的 URL 具有尾部斜杠(例如 example.com/page/)时,页面不会滚动。如果页面的 URL 以“.php”或“.html”等结尾,则工作正常。关于如何使您的脚本与 URL 中的尾部斜杠一起工作,您有什么想法吗?
哦,我的天!非常感谢您在脚本中包含注释,我对 js 非常陌生,有很多时候我根本无法弄清楚是什么在做什么。您的脚本是第一个布局如此清晰的脚本,我能够理解其中发生了什么。我将永远感激您……并且我想成为最好的朋友!非常感谢 Chris Mclean!
非常感谢,它非常有用、易于使用且运行良好……也感谢所有评论,我才能对其进行改进以使其适合我的网页……
您好,感谢您提供这段不错的代码,
我尝试了技术#1,它可以很好地更新位置,因为动画已完成,但浏览器的后退-下一步按钮的行为有点奇怪,它看起来像是历史记录被“移动”了一个“事件”(全部在 FF 3.6.10、chrome 7.0.517.44 和 IE7 PC 中):第一次点击后退按钮,屏幕上没有任何反应,但哈希在 URL 字段中回退得很好,第二次哈希再次回退,屏幕现在开始显示其先前状态,但它们不匹配。
嗯,我不确定我是否解释清楚了,有人理解我的意思吗?
有人修复了这个问题吗?
谢谢!
我已经删除了技术#1 和技术#2,只提供了一种最佳方法来执行此操作。按原样,浏览器中的“后退按钮”不起作用。这有点超出了此已相当庞大的“代码段”的范围。
如果您有兴趣让后退按钮起作用,我会使用http://www.asual.com/jquery/address/,并在更改时基本上使用他们提供的地址更改函数触发适当链接的点击,因此后退按钮滚动将起作用。
来您的网站已经很久了,直到现在才发现代码段部分(我的错)……它们太棒了!
关于这个的一个问题……是否可以在这里添加缓动?
谢谢,伙计,Sam
嗨,
我也想知道如何添加缓动?
谢谢 Chris
嘿,谢谢这段代码帮助了我们很多
Chris,非常感谢!我一直在尝试不同的 jQuery 插件,但我无法同时使两者(滚动和启用后退按钮/书签)同时工作。这正是需要的!
所有以前的示例都要求锚点具有 id 和 name。
此代码没有,如果找不到锚点链接则跳过动画
很棒的脚本,Chris。但是,当在同一页面上使用其他效果(例如 Lightbox)时,它确实会导致一些冲突。继续努力!
我也碰巧在我的页面中使用了 lightbox,这两个脚本发生了冲突。但 Rubira 的 jQuery 脚本与 lightbox 脚本一起使用效果很好。
scrollTop: (($(target).offset().top) – 41)
其中 41 是顶栏高度。
谢谢
` jQuery(document).ready(function () {
我的点是我想要聚焦的元素的 id。谢谢。你的代码完美无缺。
非常感谢!他的代码完美适用于 Joomla 3.x。无需添加更多内容,因为 jQuery 库已默认加载。
在 wordpress 中运行良好。我之前在 scrollto 中遇到了一些问题,它破坏了我的嵌套评论(不知道冲突是什么)。这解决了它。我非常感谢。谢谢。
你让我的一天变得美好。感谢分享。
我一直在试验这个脚本,它运行良好,大多数情况下。当我创建一个“返回顶部”链接,引用 body 标签中的 id 时,它会停在距离顶部几像素的地方——它会(平滑地!)向上滚动到距离顶部大约 10 像素的地方。这是为什么?谢谢。
还有一件事。也许我错过了上面评论中的解决方案,但上面的脚本似乎在 Internet Explorer 中不起作用。有没有办法使其在 ie 中平滑滚动?谢谢。
Chris,
感谢您提供的精彩教程和脚本。
这个脚本对我来说运行良好,并且使侧边栏的行为非常完美。
我唯一发现的是,它在我的选择框内不起作用。
您对此有什么想法吗?
先谢过啦!!
继续保持您出色的工作,
来自德国的Sascha
很棒的博文。代码“完美运行”!
感谢发布..
– Sri
大家好,
我想知道是否有人对我在控制台中收到的错误有任何想法
$target.offset() 为 null
var targetOffset = $target.offset().top;
我可以使页面平滑地向下滚动到正确的部分,但是一旦我单击“返回顶部”链接,它就会跳转到页面顶部。
如果任何人有任何建议可以尝试,请告诉我,因为它现在让我有点抓狂 :S
感谢任何帮助。
我也在为此苦苦挣扎…
我无法使 FF 中的“返回顶部”功能正常工作……并且 Fire Bug 抛出以下错误
$target.offset() 为 null
第 29 行
其他功能方面工作得很好……尽管像上面这篇文章中的 Scott 一样,它动画一次,然后之后会捕捉到任何一个链接……
任何帮助或建议都将不胜感激…
参考网址:http://varsitypixels.com
先谢过啦!
我也遇到过这个错误。发生这种情况是因为我没有将锚点 ID 放置到位。即
大家好,我非常喜欢这段很棒的代码,但我在将其应用到我的网站上时遇到了麻烦。
我算是这方面的复制粘贴新手,我一开始让它工作了,但是后来添加了一些其他代码片段后,它似乎就不起作用了。
具体来说,我在“返回顶部”链接方面遇到了问题。
第一个链接有效,但页面下方较远的链接无效。
http://www.ed-yu.com/website
感谢任何见解!
要添加缓动效果 - 链接到 jQuery 缓动 1.3 包
然后替换以下部分
// 动画到目标
$(scrollElem).animate({scrollTop: targetOffset}, 800, ‘easeInOutExpo’, function() {
我尝试了这个,它完全停止了动画。这是一个关于此问题的 jsfiddle 链接。http://jsfiddle.net/VEpgV/
顺便说一句,很棒的脚本 - 谢谢分享!
喜欢这个代码!我做了一些更改,有人可能会觉得有用 -
在演示中使用该代码时,当它遇到不存在的目标时,在 FF 4 上会发生语法错误 -
if (target) {
中的变量target
前面缺少 $。此外,替换
var $target = $(this.hash), target = this.hash;
为
var $target = jQuery("a[name=" + this.hash.substr(1) + "]");
使其与现有的 HTML 哈希标签兼容。
这非常有效!喜欢它!
只是一个快速的问题:如何使其向上滚动到某个高度,例如距顶部 50px?
谢谢!
谢谢!完全按照我想要的方式执行,并且没有臃肿的无用功能。
有计划在 Github 上发布这个吗?:D(求求了!)
很棒的脚本!但它在 iPad/iPhone 上不起作用。有人知道解决方法吗?
谢谢!
喜欢这个脚本,但我也遇到了上述问题。在 iPad/iPhone 上不起作用。请提供任何修复方法。
它在我的 iOS Safari(iPhone、iPod、iPad)上也不起作用,但这段较短的代码在任何地方都起作用了……并且效果相同(没有在 URL 中显示哈希,但我将修复它)。
我把它留给 jQuery 专家来找出原因……
$(function(){
$(‘a[href*=#]’).click(function() {
if (location.pathname.replace(/^\//,”) == this.pathname.replace(/^\//,”)
&& location.hostname == this.hostname) {
var $target = $(this.hash);
$target = $target.length && $target || $(‘[name=’ + this.hash.slice(1) +’]’);
if ($target.length) {
var targetOffset = $target.offset().top;
$(‘html,body’).animate({scrollTop: targetOffset}, {duration:1600,easing:’easeInOutExpo’});
return false;
}
}
});
});
我非常希望 Chris 的脚本能为我工作,但在努力了一个小时后,还是无法做到。(无法说出它为什么不起作用 - 如果我知道,我就能修复它。)但是,这个小替代方案效果很好,并且很流畅。它不需要目标的额外 ID,而只需要名称(我猜 Chris 的脚本需要目标元素具有与目标 href 相同的 ID,但没有哈希)。
谢谢。
有效,谢谢!
我也想知道如何让它停止滚动到距顶部约 100px 的位置。
谢谢,很棒的脚本。
是的,我遇到了同样的问题,您解决了吗?
我能否仅使用 HTML 和 CSS(3)实现相同的效果?
这里也有同样的问题……
非常感谢您发布此内容!正是我一直在寻找的。我过去常常避免使用 jQuery,因为没有足够的文档示例让我感到可以放心地实施它(我不是一个 JavaScript 高手),但这确实很好。它具有很好的平滑效果(如标题所述)。再次感谢!
你好!它已经可以工作了,但是当我将脚本放到我的页面上时,灯箱无法工作。请帮忙!谢谢!=)
简洁明了,一如既往地出色。谢谢!
太棒了。您知道为什么它在强大的 iPad 上不起作用吗?
有个问题?我是 jQuery 新手,我在使用此代码时遇到灯箱无法工作的问题。由于此代码和灯箱都依赖于锚点标签才能工作,所以锚点标签是否冲突?如果是这样,有没有解决方法?
如果您收到错误 $target.offset() 为 null……这仅仅意味着您有一个指向 #example 的链接,但 div id=”example” 不存在于 DOM 中。
将第 16 行从
if (target) {
为
if ($(target).length < 0) {
实际上是 > 而不是 <
我想我弄混了 gt 和 lt ;)
谢谢,太棒了!
太棒了!!!这为我节省了很多时间!!
:-)
大家好。是否可以设置滚动的持续时间?实际上,它看起来非常快……
有人知道如何设置偏移量吗?我想让它停止滚动,例如每个目标上方 50px 的位置。
我也是!我在滚动页面上方有一个固定的头部,希望滚动停止在该部分仍然位于固定头部下方的地方,而不是在其后面! :(
我的做法
在您的锚元素中添加
margin-top: -50px
。简单的解决方案,效果完美。
我没有更改HTML元素,而是使用了
scrollTop: target.offset().top -50
它很容易就起作用了。滚动几乎停止在之前事物上方 50px 的位置!
很棒的东西!
偶然发现了它,并立即开始围绕它构建页面 :)
横向移动。一切正常。
我想知道它是否可以以不同的角度滚动?
如果我假设到达左侧的第 4 页并向下滚动半页
例如,然后想要转到右侧的页面(实际上是从半页开始
比我现在高)它直接
右边。我希望它向上/向右(东北)移动 45 度。
有道理吗?我正在处理它,但它很混乱。
想知道这是否可行?非常感谢。
一切顺利,c
ps:不必 45°,38° 甚至更好
嗨,
我非常想使用这个很棒的脚本,但不知何故它在我的页面上不起作用..你知道为什么吗?
http://www.sderidder.nl
干杯!
我现在让它工作了,但是当我运行 w3c 验证工具时,它会给出一些错误.. http://validator.w3.org/check?uri=www.sderidder.nl&charset=%28detect+automatically%29&doctype=Inline&group=0
有什么想法吗?谢谢
哦,而且它在 Safari 中对我不起作用..
谢谢!,对我来说不起作用,因为我使用的是 jquery 1.6,而这是 1.4。
但这是有用的信息。我将尝试其他解决方案。谢谢。
非常感谢这个脚本!
该脚本最初失败是因为我使用了<a name=”foo”>而不是带有 id 的元素,其次,当找不到目标元素时它也会失败。
更改此内容
为此
它开箱即用,适用于现有的标记。
我在我的网站上遇到了一些问题,无法弄清楚原因。但是我实现了您的更改,它现在可以工作了。谢谢!
你好。
如果你们使用 jQuery 选项卡或任何其他 jquery 或任何其他脚本,事实上它也使用 # 标签来做一些事情,我有一个快速修复方法,编辑此行
$('a[href*=#]').each(function() {
为
$('a[href*=#wrap]').each(function() {
您可以通过更改其目标的 # 来更改默认的 a[href*=#]。
在我的例子中,我使用哈希标签 #wrap 进行滑动……
所以我修改了代码,使滚动仅针对我的包装,因此 a[href*=#wrap]
我希望你们能理解,老实说,我现在不明白。但它确实有效。现在我的 jquery 选项卡与平滑滚动完美配合。
干杯
我尝试了这个,然后我的 scrollTo 不起作用,如果有一种方法可以排除一组类或 id,那将是最有效的。从听起来的情况来看,您包含了一组锚。
你好 Jalokim,
我遇到了完全相同的问题,我的 jquery 选项卡无法工作,但我没有理解您提供的解决方案。您能否详细说明此问题的解决方案。我正在使用以下代码。谢谢
很棒的脚本,我正在我的作品集网站的重做中使用它,我希望在下周发布。该网站也使用推特的引导程序,我遇到了一个问题。如果我想使用引导程序选项卡,此代码会将页面向上滚动到顶部。
引导程序选项卡使用锚和锚链接。所以我想知道是否有任何方法可以设置您的代码以仅注意到特定 ID 内的锚链接。我不是程序员,所以请原谅我的无知。- Jeff
哎呀,Jalokim 的示例也适合我,我不知道我怎么会错过他的评论。
所以我更改了我希望平滑滚动开始于 #nav 的所有锚点,并在 JS 代码中设置了 Jalokim 使用 #wrap 的位置。然后我可以使用 #navhome #navgallery 等作为平滑滚动锚点,并且任何不以 #nav 开头的锚点都不会平滑滚动!
你能发布解决方案吗,我在引导程序的选项卡中遇到了这个问题?
嗨,很棒的教程。我想知道如何将 div 从浏览器窗口顶部偏移的滚动偏移浏览器顶部 150px - 我有一个固定定位的标题占据了这个空间,并且希望 div 滚动到顶部出现在此下方。
任何帮助都将不胜感激!
我也很想了解这个问题的答案(我有一个固定的标题)
。我尝试这样编辑 $target.offset
但它似乎对事情没有太大影响,唉。
插入 -40(或您的标题的任何高度),但在 ScrollTop:targetOffset 之后,而不是在 $target.offset().top 之后 - 因此代码应读取
$(scrollElem).animate({scrollTop: targetOffset-40}, 400, function()…
我也遇到了同样的问题,并且试图弄清楚为什么带有固定标题的“抖动”行为会发生。这就是原因——动画过程按以下顺序工作
首先,它通过数字计算将屏幕位置动画到锚点位置。然后,它将哈希标签放入位置。因此,代码实际上正在移动两次屏幕!您只是在第二次移动时看不到它,因为它已经移动到位了!
但是,如果您有一个固定标题并尝试在偏移量中考虑它,那么您将看到向后抖动,因为它在第二次移动时正在调用哈希标签位置。
我目前有两种处理固定标题问题的方法
1. 如果我必须保留哈希标签,那么这里的评论中的 Stefan 有一个很好的 CSS 偏移解决方案。
2. 如果我不必保留哈希标签,那么我只是删除对哈希标签锚点的调用,如下所示
嘿 Chris,很棒的工作。我正在玩这个示例,并且能够对其进行缩小以及解决评论中提到的某些“问题”。以下代码(基于您的工作)允许使用带有哈希的相同站点链接(即,引用另一页上的另一篇文章),以及外部链接。对于故障排除,如果这不起作用,$(‘body’)(与)$(‘html’) 将是第一个更改,其他一切应该都很好。将哈希重新添加到浏览器地址栏也非常容易,但是,从 UX 角度来看,最好将其关闭。- 这只是我的观点。(jQuery 1.7)
这解决了我的偏移问题,而且它更小。谢谢 Eric!希望没有问题:)
唉,使用“body”用于
似乎破坏了 Chrome 的功能:(有人有什么建议吗?
我正在使用 anything slider v1.5.17。由于某种原因,它在 Internet Explorer 7 中无法播放。它在 8 和 9 中运行良好,但在 7 中它只显示第一张图像,并且控件消失了。我错过了什么吗?
IE7 已经过时了,不要为它开发
非常感谢!它运行完美!但移动设备除外..有没有办法让这个脚本在移动设备上也能工作?
谢谢!
嘿 Chris!
精彩的文章,不过有一个问题,
如何在另一个文件中引用它,可能是一件简单的事情,但我有点新手 :)
– Allen Lawson
在我的网站上查看演示 = ajwebdesigner.in
这运行完美,只需粘贴带有 jQuery 的代码即可使用:D
谢谢 Chris。!
我在所有页面上都使用了 base url 元标签,并且 /#top/ 会简单地将我重定向到 homepage.html#top ...有没有什么方法可以避免这种情况发生?
嗨,...我对代码比较陌生。我在 Safari 上运行得很好,但在 Firefox 上不行。有什么建议吗?
谢谢
正在寻找一个用于商业目录网页的 scrollTo 设计师
(参见)http://www.vtlsuccess.com/Directory.html
我想要 (1) 一个手风琴效果来显示产品服务类别的商业目录(在上面页面导航行下方的白色中心列中,大约有 4 列,每列大约 25 个类别。显示的列列表为 1100px L X 227px W)。
每个产品服务类别名称最终都将有一个活动链接,可以显示该类别独家业务供应商的详细信息。
访问页面的用户将寻找特定产品或服务的提供商/供应商。他们首先搜索字母目录,然后点击他们正在寻找的类别。(2) 提供商的详细信息应显示为页面前面的弹出窗口,或页面右侧蓝色列中的单元格。我喜欢 Ariel Flesler 的“jquery.scrollto”效果来实现后一种操作(参见 demos.flesler.com/jquery/scrollTo/ 和/或 http://flesler.blogspot.com/2007/10/jqueryscrollto.html)。显示的信息应该是可打印的。
一旦提供了上述功能的代码和安装说明,我将需要知道如何设置,例如激活链接以及输入和/或更改供应商信息,因为将持续添加和更改信息。
我拥有 Dreamweaver CS3 和 Photoshop CS5。
John Hogue
[email protected]
问题
手风琴小部件能否水平和垂直工作?
手风琴面板能否包含链接、列表、表格?
Srollto.事件能否在与触发器不同的列中发生?
我的代码运行良好,除了“返回顶部”链接。它只是跳到顶部,没有平滑滚动。任何想法都将不胜感激。
http://kspersonaltraining.ca/index.v2.html
干杯
这是正确的缓动代码
// 动画到目标
$(scrollElem).animate({scrollTop: targetOffset}, 1100, ‘easeOutElastic’, function() {
我添加了‘easeOutElastic’以实现弹跳效果!
不要忘记添加 jQuery 缓动包。
这对我有用。但是我用‘easeInOutExpo’来使用它。
您好,我注意到,当我实现该代码时,滚动动画会滚动到错误的位置,然后跳转(就像普通的 href=”#*”)到窗口调整大小时它应该去的地方。问题似乎是偏移量基本上在页面加载时确定,这会破坏灵活/基于百分比的布局,因为它们会重新流动并更改实际偏移量。我最终得到的解决方案是在点击时计算偏移量。
为此,请替换以下内容
为
感谢您的帮助,Derek。
我正在尝试使用 DropBox 构建一个 html5 网站,并且遇到了同样的问题。
替换这段代码解决了问题。
顺便说一句:这在我的 Mac 上以及我可以使用的所有浏览器上都可以正常工作。在我的 Explorer 6 测试站上也运行良好。我没有使用 php 或任何其他脚本。
Chris 的出色工作。
谢谢 Derek。最初的脚本很棒,但是如果您正在构建响应式设计,则在更改大小后锚点会略微偏移。此脚本解决了此问题。
非常感谢您,Derek。
感谢您的示例。我意识到当我引用不存在的目标时,它会失败。基本上,您“确保目标存在”的逻辑需要稍微调整一下。
我替换了以下内容
为
现在每次都能正常工作了。
谢谢!
我的代码运行良好,但我还有一些选项卡式内容,并且由于它会查找任何锚点 #,因此我想编写一个例外。我了解足够的 JS 以便能够阅读它,但不足以编写我自己的例外。
如果您只对网站的内容区域感兴趣,则这更容易。例如,我对跳转到侧边栏中的链接不感兴趣,因此我更改了源代码,如下所示
var scrollElem = scrollableElement('.span9');//'html', 'body'
在我的示例中,我只对类为 span9 的 div 感兴趣。
谢谢,谢谢,谢谢!
是的,做得非常好——感谢 @Tony 和 @Derek 的调整!
大家好,
不确定这个问题是否之前已经回答过,但是如何修改脚本,以便它从 javascript 调用命令滚动到锚点,而不是 a[href*=#]。我的一些页面没有直连链接,而是 javascript 调用锚点。
这是一个很棒的教程,但是有很多评论,过一段时间后就很难理解了。提前感谢。
@Haldun 是对的——至少在 iOS 上不适用于手机...
Chris McClean 的解决方案 似乎在 iOS 和标准浏览器上都能正常工作。
嗨,我正在尝试在我的网站的此页面上插入此绝妙的效果
http://www.martinimarmi.it/marmo.html
我的想法是在中心左侧的 div 中设置链接,然后单击时将中心右侧的 div 滚动到锚点。但问题是我不太擅长 javascript(是的!英语也不太好,抱歉),所以我向你们寻求帮助。
如果您有任何想法,请帮助我。
我使用 Chrome 并打开了 Java 控制台,然后粘贴了脚本。
错误是 TypeError: Cannot call method ‘ready’ of null
大家好,我正在尝试在我的页面上实现它,但还没有成功。当我使用 firebug 时,它出现在 head 标签中(它是一个 drupal 站点,因此我将其放入 .info 主题文件中的文件引用中),但是我无法使其真正工作。我还刷新了缓存。它位于 http://icanw.org.uk/cms/ -如果有人有任何想法,我将非常乐意听到 - 谢谢!
我有一个固定标题,并且使用以下代码(但正在运行)返回 #NaN
关于如何在没有 NaN 的情况下获得所需效果的任何想法?
我也遇到了奇怪的 #NaN 问题。我希望有一个解决方法。真是太糟糕了,否则偏移量技巧运行得非常好!!
我正在使用 Derek 和 Tony 修改后的代码,如果这对任何故障排除有所帮助…
大家好!
非常喜欢这个脚本,做得很好!它在我的静态页面上运行良好,但现在我正在尝试在 wordpress 安装中使用该脚本。并且无法使其工作。这类似于“$”和 jQuery 冲突,但我认为不完全是...我尝试用“jQuery”替换脚本中的所有“$”,但也没有奏效...虽然我没有期望它能奏效。像“ $scrollElement = $(el); ”这样的行也会导致冲突...所以我的问题是我必须在哪里更改“$”?或者我的问题是否有其他解决方案?我尝试了 no conflict,但没有奏效...
顺便说一句,我也遇到了固定标题问题。我的解决方案是给锚点一个类“goto”,然后用 display:block; 以及与标题高度相同的填充和负边距进行样式设置。就像
a.goto { display: block; margin: -69px 0 0; padding: 69px 0 0; }
然后,填充会将我的内容推到视口顶部的固定标题之外,负边距“抵消”块显示,以便所有内容都保留在原位。希望对您有所帮助...
通过填充进行修复有效。感谢您的帮助!
运行良好。非常感谢。对我有用 :)
这可以用于商业目的,例如企业网站吗?
谢谢
你好,我是jasmine。今天我遇到一个问题。当我在网页中使用firebug时,我的表格会被向上移动。目前我正在使用eclipse。有人可以帮我解决这个问题吗?
感谢Derek!
大家好。非常棒的代码片段!!
只需要做一个小改动:当获取到的链接指向DOM中不存在的某个对象时,就会崩溃。
解决方法是检查您指向的对象是否存在。要实现这一点,只需更改“if”部分
为
已解决。
很棒的代码片段!
我找到了解决标题“错误”的方法。变量target是一个字符串,因此您不能从中进行提取。所以,不要在回调函数中更改哈希值,而是在动画结束后执行if语句。
好的,在之前解决标题“错误”的方案中,哈希值更改后存在滚动问题。这是我的新修复方案
它有效,但是有人可以解释一下为什么在回调函数之后traget id会恢复到原始值吗?我以为我需要手动执行此操作。
这有效!只需在“top”之后添加所需的值,然后添加
$(target).attr(‘id’, ‘tmp’);
在animate行之后!
谢谢!
大家好.. 我在我的容器(页面居中)中使用此滚动功能。我在屏幕左侧有一个固定(fixed)菜单。如果我将窗口缩小,然后选择一个菜单项,它会向下滚动,然后向左覆盖我的菜单。这可能是由于滚动造成的吗?如果是,我该如何禁用它?
谢谢。
我喜欢这种效果,但注意到它存在一些可用性问题。我在客户网站上实现了它,然后注意到,如果您想使用“后退”按钮导航,它会开始遍历您已使用过的所有锚点,这非常烦人。
如果有一个解决方案,可以在使用锚点后通过单击一次“后退”按钮离开页面,那就太好了。
有人有想法吗?
嗨,Tom,
您只需删除动画的回退函数即可。所以,不要使用
您写
无论如何,我认为注册锚点更友好,因为它模拟了逐页导航,如果您明白我的意思。
希望对您有所帮助。
非常感谢!我认为这取决于实现方式。我可以看到循环返回有效的实例,也可以看到无效的实例。
无论如何,知道可以在需要时执行此操作是很好的:)
谢谢Chris,运行完美。
此脚本非常接近我的需求,但我有两个变量未解析。有人可以提供一个包含这些选项的简洁脚本吗?我相信这会帮助我在许多其他网站上阅读过的许多其他遇到相同需求的人。
1.) 我需要通过类来定位链接,以避免脚本破坏页面上的其他功能。
2.) 此 wiki 上的锚点不使用 id,而是使用 – name=”my link”
如果有人感兴趣,也可以看看我们整理的这个新模板 - Slidexy -:http://www.tallhat.com/templates/slidexy/ - 它使用 jQuery 并且也是响应式的,因为它在 iPhone 和 iPad 上也能很好地呈现相同的内容。
我发现这个名为jQuery.LocalScroll的脚本在我的上述参数范围内有效。它似乎无法处理具有超过常用字母的标题,因此逗号、问号等会导致它恢复到默认锚点链接的令人不快的移动。
我非常喜欢此页面上的脚本,但是对于我正在处理的这个大型 wiki,我无法使其正常工作,除非我定位链接类或父容器,并在锚点上使用name=link”而不是id=link”。我以后会回到其他项目中使用此脚本,并且很乐意捐款 -
如果有人有修复方案可以让它在 iPad 上也能工作,请告知我们!
完美,这正是我一直在寻找的。
是否可以将其与其他 jQuery 插件结合使用以加快加载时间?(不会破坏代码)
我们如何让它在 iPad 上工作?谢谢!
如果浏览器缩小,您的代码在一些浏览器(IE、Chrome 和 Safari……FF 似乎没问题)中会失败。这似乎是因为您检查容器是否可滚动的方式。以下几行似乎是问题所在
我猜当浏览器缩小时,滚动一个像素不会滚动(这很有趣,这使得 1 不大于 0)。更改为 2 可能会足够解决此问题。
我刚刚阅读了此网页:http://djpate.com/2009/10/07/animated-scroll-to-anchorid-function-with-jquery/
发现我可以使用以下代码执行此操作
function goToByScroll(id){
$('html,body').animate({scrollTop: $("#"+id).offset().top},'slow');
}
它比您的代码小一点,我想知道您的代码做了什么而此代码没有做。
优秀的帖子,运行良好… 我已将其应用到我的博客中..
请在此处查看“YourBloggingTips – 平滑锚点链接”
我使用了两种方法,一种是帖子中提供的,另一种来自“参考 URL – 页面源代码”。
两者似乎都能正常工作。
我更改了
滚动速度
、target.offset
以及对// 确保目标存在
进行了一些小的更改。以下是我的完整修改代码,它 100% 有效
太棒了!非常感谢,它帮助我完成了一个项目!
大家好,出于某种原因,我无法在此站点和特定页面上使其工作:http://milemarker.com/?page_id=1060
任何帮助将不胜感激。
谢谢!
太棒了,谢谢!
不过还有一个问题
我正在设计一个网站,该网站有一个固定位置的顶部栏,因此当您向下滚动页面时,它会停留在屏幕顶部。这意味着,当我指向页面的某个特定部分(例如一行文本)时,它会被顶部栏隐藏。有没有办法将滚动目标偏移几个像素,以便用户想要查看的页面部分不会被顶部栏隐藏?
我希望所有这些都有意义。
先谢过啦!
嘿,chris,您知道如何防止 URL 末尾出现哈希标记吗?如果它是一个哈希书签链接,我不想在 URL 中添加任何内容。如果您知道代码,请告诉我将其放在上述代码的哪个位置。
哦,我的天哪,非常感谢!我一直在想是否有人有此函数的好的代码行,但您的代码有效!真是太欣慰了!
非常感谢。已在我的当前工作页面上实施,效果很棒!
不过,如果可以的话,我还有一个快速问题。
如何不让目标 ID 名称(哈希值)显示在 URL 中?有办法吗?
我之前做过类似的事情
嘿,谢谢分享。这真是天才!
这在响应式站点上也能实时工作。发布的解决方案在浏览器调整大小以进行响应式设计(使用媒体查询)时不起作用,但您的解决方案有效!再次感谢!
啊,顺便说一下,我正在尝试实现一些功能来“推动”目标位置,比如说120px,就像这样
我正在使用的当前布局正在阻止我的h1,如果它可以使用上面的代码“拉/推”最终目标位置,那就太好了。
Chris提供的原始示例在Safari 6.0.3 for OS 10.8.3上不起作用,但是您上面发布的这个完全有效,甚至还有哈希标签功能。太酷了!感谢发布!
嗨,谢谢,这些东西很棒。
当我在iPad上查看我的网站时,有时滚动有效,有时无效。其他人遇到过这种情况吗?
有什么建议可以解决这个问题吗?
我正在构建的网站是
http://www.risrani.com/newsite/risrani.html
你也可以更改
为
这样锚标记的“href”属性以开头,而不是仅仅包含哈希。
您好,
我在iPad上遇到了您提到的相同问题。在我的终端上,它以较大的延迟工作。不知道是什么原因造成的,但我也在寻找替代方案。
您好,如果点击一个锚点,然后向上滚动到页面顶部并点击另一个锚点,代码似乎可以正常工作,但是如果您想在不滚动到顶部的情况下逐个导航锚点,那就会很糟糕
我该如何使其像此网站一样工作:http://happycog.com/?
也想知道如何使其像happycog.com一样工作 - 但与iphone/ipad兼容。任何帮助或指导都将不胜感激!谢谢。
遇到问题。我是jQuery新手,我按照教程中的显示方式使用代码。结果发现客户端使用iframe拉取我的页面。是否需要对代码进行修改才能使其工作,或者从一开始就无法工作?如果有修改,有人知道这些修改是什么吗?提前感谢。我真诚地感谢它。
$(document).ready(function(){
$(‘a[href*=#]’).click(function() {
if (location.pathname.replace(/^\//,”) == this.pathname.replace(/^\//,”)
&& location.hostname == this.hostname) {
var $target = $(this.hash);
$target = $target.length && $target
|| $(‘[name=’ + this.hash.slice(1) +’]’);
if ($target.length) {
var targetOffset = $target.offset().top;
$(‘html,body’)
.animate({scrollTop: targetOffset}, 1000);
return false;
}
}
});
});
我正在使用参考链接中的插件,但我无法使其工作:我有一个滚动/跟随侧边栏(来自这里https://css-tricks.cn/scrollfollow-sidebar),我想应用平滑滚动到其链接。它向上返回时有效,但向下滚动时无效(链接根本不起作用……)
这是文件http://cl.ly/3h3i3p0h0m34191F0T2h
有人可以帮我解决这个问题吗?提前感谢
插件在最新的Safari 6.0(Mountain Lion)中不起作用
如果我想添加像“easeOutExpo”这样的滚动效果
我应该把它放在哪里,如果可以的话?
顺便说一句,很棒的jQuery,非常有用 :)
喜欢它!
Chorny
太棒了。非常感谢。
出于某种原因……在Mountain Lion升级后,这在Safari 6.0中不再起作用。
我可以确认这一点。希望以后有时间更新。
感谢您确认这一点。也许有解决方法或解决方案的人可能会介入并拯救局面。
我没有Mountain Lion,所以我甚至无法尝试。
是的。Mountain Lion 搞砸了!无法确定原因……
好吧,似乎不是代码问题,而是Safari的错误
https://discussions.apple.com/thread/4145775?start=0&tstart=0
它似乎与jQuery .scrollTop() 函数有关。
出于某种原因,Safari 6 使用以下方法正确滚动元素,
但在之后使用以下方法报告了不正确的值,
但最有趣的是,如果您再次调用该函数,Safari 6 将报告正确的值,
我在http://www.cybmed.com/w/safari6bug上快速整理了一个测试页面来演示此行为。
感谢您解决此问题,哇,您在那里提供了一些详细的解释和解决方案。
希望这个错误(由Safari)尽快得到修复。
只是发布以保持更新。
我非常喜欢这种平滑滚动,它对我来说运行良好,没有任何问题。非常感谢您提供如此优秀的滚动功能。
有没有人能够在Safari 6.0上使其工作?或者至少有一种方法可以让正常的锚点(跳转到)功能工作?
这似乎在某些版本的Chrome中停止工作了。有什么建议吗?
Safari中的错误。50% 的解决方案 - URL 更改不起作用
将jQuery升级到1.8
安排iOS的平滑滚动
这是Johnny对上面提到的错误的一个很好的解释
此评论发布在Safari 6 破坏了我的 JavaScript上。
嗨,您的脚本做得很好,我需要从外部链接工作,是否有任何解决方案,页面加载时获取该效果。
这真的很棒,我设法使其完美运行,尽管我不了解任何 JavaScript。但是,我刚刚也使用了这种使用锚点的导航技术,因此在按下显示导航按钮时会产生延迟,因为隐藏的菜单认为它应该滚动。
这是一个大胆的猜测,但您是否知道一种排除特定锚标记的简单方法?
嗨,
这是一个很棒的代码片段,但最近我在 Safari 中发现了一个问题。
Safari 无法识别以“id”命名的锚标记,只能识别具有“name”属性的锚标记。
但是脚本不适用于此方法,因此在 Safari 中锚点不起作用。
有人找到任何解决方案了吗?
谢谢大家。
刚刚注册了更新。回家后会尝试使用这种技术。
我有一个与上面 Sascha 类似的问题。此脚本对页面上的所有硬编码锚点都运行良好,但我还有一个使用此脚本的“查找”按钮
function jumpToAnchor() {
window.location.href = String(window.location).replace(/#.*$/, “”) + ‘#’ + document.getElementById(‘findname’).value;
}
以及此标记
select name=’findname’ id=’findname’ class=’selectOne’
input type=”button” value=”查找” onClick=”jumpToAnchor()”
但这并不会实现平滑滚动,而是直接跳转到链接。有没有办法将平滑滚动整合到此逻辑中?
感谢任何帮助。
这个稍微容易理解一点,但它们都做着同样的事情。
这看起来像是相当大的一段代码,实际上是为了定位页面并实现平滑滚动……,这是我用来实现平滑滚动的……
$(document).ready(function() {
$(document).scrollTop($(“div.wrapperBlock”).offset().top); /这将是页面的包装器/
$(“ul.nav li a”).click(function(){ /在这里您可以编辑您的HTML CSS 结构/
var endPoint = $(this).attr(“href”).replace(“#”,””);
var target = $(“a[name='”+endPoint+”‘]”);
if (target.length)
{
var top = target.offset().top;
$(‘html,body’).animate({scrollTop: top}, 1000);
return false;
}
return false;
});
HTML 代码如下
关于
当然,你所做的肯定是有意义的,但我更喜欢这段简单的代码。
Chris 的代码片段在 Chrome 浏览器中无法在我的网站上平滑运行。但不知何故,Devin 的代码却运行得非常完美。
对于这个功能来说,代码太多了。
看看这篇文章,只有 4 行 jQuery 代码就能实现同样的效果:jQuery:内部锚链接的平滑滚动 – 作者:Charlie Evans。
运行完美。不会与 Bootstrap 轮播图冲突。
太棒了。
修复了 Safari 问题 + Chrome 浏览器中更流畅的滚动。谢谢!!
感谢您的工作,您的网站上提供了非常棒的资源……
为什么不能提供一个只包含必要代码的普通页面呢?没有外部链接;主页链接、广告等东西…太混乱了!
我在实现这段代码时遇到了麻烦。它干扰了 Bootstrap 的轮播图。我在论坛上写了一篇较长的帖子,但我认为我也应该在这里提出我的问题。当我点击轮播图中的箭头时,页面会跳到轮播图的顶部。此外,URL 会更改为“mydomain.com/myproject/#mycarousel”。**如何阻止页面跳动和 URL 更改?**感谢您的帮助。
正如我在你帖子上面提到的,尝试使用这段代码:jQuery:内部锚链接的平滑滚动。
Pulkit Goyal 回复了我的帖子,说上面的脚本不会与 Bootstrap 轮播图冲突。如果需要,您可以通过他的网站与他联系。
此外,您可能需要在函数中使用
(e).preventDefault();
来阻止锚链接激活。在本地,这运行得非常完美。但是,现在我的网站上线了,偶尔平滑滚动不起作用。当我点击链接时,它什么也不做。然后当我刷新时,它就正常了……有什么想法吗?
修复了链接…
kswedberg 的 github 平滑滚动
跨浏览器,很棒的选项。
这是一个使其在 Safari 中运行的修复程序 :)
太棒了。谢谢
Hola,非常感谢,运行完美。我的问题是,如果我想让它水平滚动,该如何实现?谢谢
Juan,Nick 在下面提到的插件,kswedberg 的 github 平滑滚动,似乎根据我在文档中读到的内容有水平滚动的选项:
direction: 'top', // 'top' 或 'left' 之一
我不知道这是否是您要问的问题。
附注。我懂西班牙语,但我建议您始终用英语发帖,即使很糟糕也没关系。这是获得帮助最有效的方法。
您好,您知道这是否适用于 iframe 吗?
我也可以将此代码片段用于商业用途吗?
提前感谢您的回复。
此致
Chris 的代码运行良好,但是 Devin Sturgeon 和 Weremoose 等人编写的较短的代码在初始化 Firefox(PC)窗口时,所有其他链接都会出现明显的性能延迟。
除了上面那篇帖子之外,我现在还发现 Chris 的代码确实存在一些延迟(但明显较少)。如果我们稍微更精确地定位选择器,那么这完全可以消除其他链接的延迟。$(‘#header a[href*=#]’).each(function() { …
我是一个网页设计新手。尝试在我的网站上实现平滑滚动。我已经创建了锚链接,现在只需要包含平滑滚动。请问有人可以提供一个分步指南说明我该如何操作吗?
谢谢。
在我的项目中运行良好!
非常感谢!但这在 Safari(v6.0.2)上不起作用。有人可以帮我解决这个问题吗?
太棒了!!!!!!!
我大约已经搜索了一个小时了……谢谢兄弟……
您的网站是 CSS 和 jQuery 教程中最好的……我是您的粉丝……谢谢…… :)
嗨,我不太擅长 jQuery,但我对 CSS 和 HTML 非常熟悉,我只是想要一个简单的东西:一个链接,当我点击它时,页面会平滑地滚动到一个 id 为“here”的 h1 标签。您能否请您发送给我一段代码,我只需要复制粘贴即可,并且您能否添加注释说明我需要在何处写入 id 或进行任何更改…拜托拜托拜托我真的很想要这个。请将带有注释的代码发送到我的电子邮件:[email protected]
我怎样才能让它水平滚动呢?=(
这修复了 Mountain Lion 中的 Safari 问题,但您必须为触发器指定一个 ID 或类。
干杯
据我所知,您可以使用任何选择器,例如 a[href=”#] 或 “.nav a” 将与原始选择器具有相同的用途,而不会增加类的数量 ;) 但非常感谢您提供此代码片段,它使我当前正在进行的项目完成了 50% LOL。
请问您能将完整的演示文件发给我吗!!
如果还有人遇到 iPad 导航在第一次点击后无法点击的问题。我发现了一种解决此问题的技巧。您需要在最后一个元素或容器的结束标签之前添加一个 div,然后使用 jquery 将高度设置为 1px,然后再运行动画,然后在 .animate() 上使用回调函数,在动画完成后将高度设置为 0px。
我在这里使用的代码
并且我在我正在滚动的内容的末尾之前放置了一个 id 为 device 的 div。
功劳归功于应得的人,我在此处找到了此解决方案
http://stackoverflow.com/questions/7826868/fixed-position-navbar-only-clickable-once-in-mobile-safari-on-ios5/10030251#10030251
大约搜索了一个小时后。我希望这可以帮助某些人。
天哪,这么多评论!谢谢!这正是我今晚需要的!
抱歉,伙计们,我对 jQuery 完全陌生。
我在 head 标签中嵌入了 jQuery 的 Google 库链接。
我把提供的代码放在 head 标签之间,甚至放在 body 标签之后,都没有效果。
我只是想当我点击 `< a href="index.html#point1" >` 时
浏览器缓慢地移动到 `< a name="point1" >`
提前感谢。
如果我想使用外部链接怎么办?
例如:首页有一个链接
图库 06
重定向到图库页面并滚动到 id="06"
如何保留锚点链接?
哇,它开箱即用。我甚至不必更改任何内容就能使其工作。只需将代码复制粘贴到网站中即可。令人印象深刻!
滚动有效,但每当它滚动经过另一个 div 时,它会暂停一秒钟,使其看起来像滚动延迟了。有什么解决办法吗?
突然无法在 iOS 设备上使用 - 今天早上它还能暂时使用!
有没有人遇到过类似的问题?
非常感谢。你的代码不起作用(在滚动到目标位置之前会一直滚动到顶部),但 Devin 的代码运行完美,并且动画流畅。
干杯!
我爱你,这立即起作用了。正是我需要的,谢谢!
有没有其他人遇到过滚动超出指定 ID 大约 30 像素的问题?尽管如此,我还是喜欢这个脚本,非常棒。
我发现它计算得很好,实际上看起来偏移是因为我在网站上有一个固定的导航。我将研究如何将其偏移一定数量的像素,抱歉发了这条不必要的评论。
你找到解决办法了吗?
您好,我使用了 jQuery,它运行良好,除了顶部边距。我的网站有一个 70px 的固定头部,每当页面滚动时,它都会隐藏在固定头部后面!如何在脚本中应用顶部边距?提前感谢。
我目前正在为客户的网站开发一个固定头部,这对我有用
只需将“-70”更改为与固定头部的相同高度。
我刚刚复制粘贴了代码,它就起作用了!非常感谢,我一直在到处寻找这个。
@Radax:在页面上搜索一下,在评论的中间部分有一个关于你问题的答案 - 我遇到了同样的问题,多亏了它,我解决了这个问题。
嗨,
它正在工作……但是……
当我更改浏览器的高度时,滚动不再起作用。在进行 CTRL+F5 后,一切恢复正常。
我该如何解决这个问题(而无需让访问者按 CTRL+F5)?
此致,
鲍勃。
感谢分享。它运行良好!有没有办法添加视差效果?我可以想象可以通过包含多个平滑滚动的叠加层并调整每个叠加层的计时来同步它们,但我不太清楚从哪里开始。
此外,平板设备的“滑动”功能怎么样?我使用 Swipe 2.0 成功实现了左右滚动,但认为带有粘性区域的平滑滚动,以停止滚动到锚“部分”,会很酷。再次感谢。
当链接滚动到该部分时,如何添加活动类?
谢谢,真的帮了我的忙,简单但很酷……
@Kawsar:这对我有用
$('a').click(function(event) {
event.preventDefault();
var url = $(this).attr('href');
$("a").each(function(index) {
$(this).attr('class', '');
});
$(this).attr('class', 'selected');
});
卢克,我无法让它工作,如何添加活动类?我正在使用 bootstrap 导航……任何帮助将不胜感激!
这是我拥有的
嘿,这似乎不适用于向上滚动:例如,如果你添加一个从第三部分滚动到第二部分的链接,它对我来说不起作用。有什么想法吗,伙计们?
开箱即用。哇哦!:)
你很棒,我真的很想成为像你一样优秀的程序员。向你学习!!你是最棒的……再次感谢……
它在 iPhone 上不起作用 :(
Devin 的代码运行完美:D
您好
我正在将此脚本与页面顶部的一个固定导航(高 150px)一起使用。有没有办法使用 jscript 为 #anchors 添加一些顶部填充以补偿固定导航?目前,部分标题会消失在导航下方。我不是 jscript 程序员,所以不知道要添加什么或是否可行!
非常感谢
首先 - Devin 的代码很可靠,效率也更高。
其次 - Webkit 中的一个错误导致整个事情变得有点混乱
http://stackoverflow.com/questions/1830080/jquery-scrolltop-doesnt-seem-to-work-in-safari-or-chrome-windows
如果你在使事情正常工作方面遇到麻烦,请阅读那篇文章。Shog9 提供了一个简单的解决方法。
在我尝试了各种方法两个或三个小时后,它开箱即用。我想我的额头现在有淤青了。
您好,我已经实现了它,并且效果很好,但我有一个问题,我似乎无法让“滚动到顶部”链接进行动画?我猜这是因为井号后面没有任何内容?
截至本文发布日期(2013 年 10 月 2 日),在此页面上看到的此代码的最新版本对我来说运行完美,作为一个复制粘贴的“即用型”解决方案,用于平滑滚动到页面上的锚点。我将其添加到现有网站上的几个页面中,这些页面在许多关键区域中普遍存在锚点 - 在这些区域中,此功能非常需要增强网站访问者的体验 - 它立即生效。做得非常好。谢谢。
我能够让一切正常工作。当我开始更改我用于背景的图像(png 和 jpg)时,我注意到滚动有点卡顿。页面大小是否必须达到一定的长度才能最佳地工作?为什么“平滑”不那么平滑?谢谢。
它运行得非常好。谢谢..
只有一件事。如果我放大浏览器,滚动会以非常奇怪的方式表现。但是,在正常情况下运行良好。
嗨,
如何修改 Chris 的代码以在 URL 中保留哈希?我已经尝试了好几天了……谢谢
运行完美……:)
不错,
代码非常简单,运行得非常好
我注意到在放大时滚动行为很奇怪=/
无论如何,谢谢=D
此代码不适用于最新版本的 jQuery 1.10.2。
该死!
Chris,请您更正代码中的错别字。
我相信应该是
否则,页面可能会滚动到锚点,而不管 URL 路径如何。这个错误困扰了我一整天!谢谢!
您说得完全正确!发现错误,已修复。
完美,谢谢!!:) 我不得不修改为向上 80px。
这是我为**WordPress**制作的带有缓动效果的动画滚动代码。(这不需要 jQuery easing 包)
将其放入**Functions.php**中
谢谢 Michael,我一直在尝试弄清楚如何在 WordPress 中实现这个功能。这完美地工作了(而且更容易实现)!
做得好!
3 个说明
1. 它也可以作为一个插件添加(这样你可以在遇到问题需要调试时启用或禁用它,并保持你的 functions.php 文件整洁):2
2. 我建议给出一个更具体的目标,以防止页面其他部分出现问题。所以我建议替换
为
我会将其挂接到页脚,我认为它不需要在标题中加载 add_action(‘wp_head’,’smoothscroll’);
带有说明的插件:https://gist.github.com/tukano/2e30cc9262da4b45d047a46ffd829adc
有人能告诉我我哪里出错了?我尝试了太多不同的版本,但似乎都不起作用。
http://www.kt-testing.co.uk
这是页面,查看源代码中的代码。
谢谢。
太棒了。我发现很多人声称知道答案,但他们并不知道。你的代码第一次就完美地工作了。我现在就去关注你的推特。
嗨,
这太棒了!
一个问题,我的页面顶部有一个响应式菜单,ID 为 #menu,如何将此 ID 从函数中排除?任何帮助都将非常棒!
谢谢!
我用过的最好的!非常感谢!
平滑滚动在我的 iPad 上不起作用。据我了解,iOS 通常会关闭 JavaScript 以节省内存。有没有针对 iPad 的解决方法?或者您是否有任何备选方案建议?当启用平滑滚动时,我的常规 href 锚点在 iPad 上不起作用,尽管在禁用时它们可以正常工作。(我喜欢这个代码片段,它在台式机上运行完美!)
http://www.nebraskaaddys.org/dev2/student-submissions.php
我不知道是否有人已经提到过这一点,我在评论中找不到任何相关内容。
如果目标距离只有 300px 或 1500px,动画时间都是一样的。所以我添加了以下内容…
var scrollDiff = target.offset().top – $(‘body’).scrollTop();
然后将此值用于动画时间
是的。这个脚本很棒。我已经使用它大约十年了。
有没有办法让它在一定距离内平滑滚动,然后在最后弹跳?我曾经访问过一个网站(现在找不到!),他们在其中使用了带弹跳效果的滚动到顶部!有什么建议吗?
尝试使用 TweenMax..
http://jsfiddle.net/ZB26f/4/
首先感谢您的回复。
脚本不错,运行起来很流畅。
问题是它的体积(99 KB)。如果它可以通过一个小的内联脚本工作就好了。有什么建议吗?
完美地工作!谢谢!
这工作得很好,直到我遇到一个问题,即在我的导航栏中使用这些带有滚动动画的链接。我有一个滚动函数,在滚动时突出显示每个链接的背景。当单击链接时,应突出显示背景并滚动到目标位置。但是,link.click 函数下的滚动动画仍然是一个滚动动作,尽管不是人为操作,但会触发滚动函数。
所以假设导航栏上有 10 个链接,我点击最后一个,您会看到在您的代码从第一个滚动到第十个的动画过程中,1-10 的背景都高亮显示然后取消高亮,就像一列火车一样。
我该怎么做才能防止这种情况发生?添加一个条件来过滤滚动动作是人为操作还是动画?
谢谢
访问您的网站后感觉很棒!:-)
MUCHAS GRACIAS !!!! 非常感谢,非常简单,使我的网站看起来更优雅 :)
如何修改代码,以便它在 URL 末尾显示哈希?例如 http://www.example.com/#about-us 而不是 http://www.example.com/
谢谢!以下是如何在单击后**使哈希在 URL 中可见**的建议
我认为这种行为更好。它更接近浏览器的默认行为,这意味着用户犯错的可能性更小(例如在浏览器历史记录中),并且他们能够复制粘贴包含哈希的完整 URL。
就我个人而言,我还应用了以下额外更改
更改选择器:仅对具有“scrollto”类的元素应用动画滚动。我这样做是为了获得更多控制权并避免与其他内容(如轮播)发生干扰。您可以轻松地修改选择器以满足您的特定需求,例如通过选择多个类。
滚动停止点设置为目标上方 20px。感觉不那么局促。:)
滚动在 500 毫秒内完成。我认为这足够了,并且似乎记得一项可用性研究发现,用户触发的导航动画(或类似动画)应该在 500 毫秒或更短的时间内完成。没有时间查找参考,但我认为它是 Jakob Nielsen 的一项研究。(话虽如此,我有点喜欢根据滚动距离 (SD) 计算时间的想法,即较短的距离使用较短的时间,较长的距离使用较长的时间。)
如果有人感兴趣,这里有代码
是否可以在窗口加载时添加此 js,让 js 平滑地移动到内容?
感谢 Chris。
有谁知道如何在用户在 URL 上键入新的/不同的哈希时强制浏览器运行此脚本?我注意到它在首次加载时会运行。但是,当用户键入新的哈希时,浏览器似乎会接管并执行默认操作——即直接跳转到哈希位置而根本不滚动。
我稍微修改了脚本,因为我的页面顶部有一个固定的导航栏。所以我正在调整滚动到的位置。但是当用户键入新的哈希时,它没有运行。这种情况可能永远不会发生(用户键入哈希),但我认为在这种情况下运行脚本也很不错。我见过一些 CSS 修复方法来调整此类情况下的边距/填充,但我不喜欢这种解决方案(因为它会影响用户从页面复制/粘贴文本的能力)。
先谢过啦!
哦,我找到了问题的答案:jQuery 有一个“haschange”事件。不错!
大家好。对于那些仍然尝试在 iOS 设备上使其正常工作的人,您只需添加一些 CSS
-webkit-overflow-scrolling: touch;
确保将其添加到滚动内容的样式属性中,您就可以开始了!:)
我在代码中添加了以下行,以避免在当前哈希上出现不适当的滚动
完整代码
谢谢老兄,太棒了!运行完美…
嗨,我对编码一无所知,但我想在我的“返回顶部”锚点上实现此效果。有人可以解释修改内容以及我需要执行的确切操作(详细说明!!)以使其正常工作吗?
任何帮助将不胜感激。
这个平滑滚动功能很实用。谢谢:)
你是个巫师!非常优雅,再次感谢Chris!
如何在以下代码上添加此动画:onClick=”location.href=’#div'”?
Chris,非常好,将来会用到。
谢谢,这正是我要找的,它能正常工作,我没有任何问题,再次感谢,保重。
这不起作用,并产生错误“TypeError: target.offset 不是函数”。
所以,我想偏移滚动停止在页面顶部的位置。我有一个固定的导航栏,当我导航到所需的区域时,它总是隐藏在下方 - 你能提供一些建议吗?
非常感谢,帮了我很大的忙。。
你可能会发现这个JS与Bootstrap冲突。
如果是这样,这里有一个不错的解决方法
第一行 $(‘a[href*=#]:not([href=#])’) 实际上查找所有可以优化使用的锚元素 HTML 5 数据属性
替换
$('a[href*=#]:not([href=#])')
为
$('[data-toggle="elementscroll"]')
接下来要做的是在每个锚链接上放置 HTML 5 属性,如下所示
希望这对任何遇到此问题的人有所帮助!
如果有人知道如何扩展此代码,以便我可以更改导航链接的颜色或添加下划线等装饰,将不胜感激。__
这就像魔咒一样有效。
谢谢!!
有没有简单的方法将此代码添加到单独的JS文件中,然后从主HTML中调用该函数?
http://cferdinandi.github.io/smooth-scroll/
这对我的效果最好。它不使用jQuery。
我花了很长时间才找到你推荐的解决方案..谢谢先生,这对我的效果很好!
我不知道是否有人已经发布了这个解决方案,但我将我的链接放在了一个固定的页脚中,并将内容放在了body内的div中。
上面的脚本只有当从页面顶部到点击的链接时才有效,从一个链接到另一个链接似乎不起作用。我注意到原因是scrollTop设置为锚点之间的距离,而不是锚点相对于其父元素的实际偏移量。所以我只是取了这两个距离的差值,并将其添加到用户已经存在的scrollTop中,这样就使一切都正常工作了。
你是我的救星!我过去48个小时一直在苦苦挣扎,你的代码解决了我的问题!我所要做的就是将#myDivWithScrollBar的两个实例替换为#content,这是我使用的div的名称,然后一切就都像钟表一样运转了。
非常感谢你抽出时间发布你的解决方案!
我的标题是固定的,当我点击它时,它会向下滚动,但它会被隐藏在顶部固定位置的标题后面。
你能告诉我如何设置向下滚动时的顶部位置的解决方案吗?
你应该使用:top-你的头部高度,例如top-60..
在这个smoothscrool.js中使用top -100确实完美地工作了(我很高兴我找到了它),但只有在我的iphone(纵向,横向都很好)上,由于媒体查询中的设置,偏移量大约大了15px,我该如何通过JS解决这个问题?我不想让头部在移动设备纵向方向上太大…在css中,这意味着我必须给body -15px的顶部边距…?可能有一个我不知道的JS解决方案?
谢谢,再见,Mary
$(document).ready(function(){
//首先,你定义一个空白div并添加黑色类.up,上下两侧添加类.top[返回顶部]
$(“.top”).click(function(){
$(‘html, body’).animate({scrollTop: $(‘.up’).offset().top -100 }, 3000);
});});
大家好,
所以现在我对脚本有一点问题。当我添加一个简单的a href链接时,它会起作用。但是当我使用图像地图时,我没有滚动效果。有没有人有解决此问题的想法?
感谢帮助 :-)
你解决图像地图问题了吗?我遇到了同样的问题…
我在控制台中看到这个
Uncaught SyntaxError: Unexpected token ,
现在怎么办?
我想知道哪个设置定义了target。当我测试这段代码时,它似乎会跳转到target的底部,而不是像演示那样。如何解决这个问题?
嗨,它工作起来很棒,但是我的页面上有轮播,它们也使用#标签来工作..并且这段代码通常应用于所有具有#的href..所以谁能告诉我如何使其更具体?这是我的菜单代码,我只希望它应用于此
首页
关于
特色
列表
表单
服务
作品集
推荐
联系
糟糕,我的菜单结构是这样的:nav -> ul -> li -> a
只需调整选择器为
:)
谢谢,Chris!我不使用JS,但我能够直接将其插入。非常感谢多年来我在此处找到的所有帮助!
但它被调用了两次,因为它包含HTML、BODY
你可以测试一下。
谢谢,它运行良好。但我正在使用fancybox。在我添加这些代码后,它无法正常工作。我认为这是因为“href*=#”,但我真的不知道该怎么做。你能帮我吗?
在尝试重构别人的代码时遇到了同样的问题。不确定是什么导致了这个问题。
大家好,
我在滚动和bootstrap的滚动侦测方面遇到问题。所以当我滚动时,菜单项状态会相应地更改为活动状态,这是我想要的..但我希望滚动在锚点之前停止60个像素,所以我使用了top-60,但现在滚动侦测无法正常工作,当它滚动时,它会激活上一个菜单项,我该如何将其也更改为-60??请任何人的帮助都会不胜感激..
好的,我找到了这个解决方案,它解决了问题
现在另一个问题是,当我点击轮播的下一个/上一个按钮时,在转到下一个/上一个幻灯片时,页面还会向上滚动大约30px或40px..我删除了这段偏移代码,但它与之无关..有没有人遇到过这种问题?
非常感谢你的代码。它在我的网站上运行良好。为了避免未捕获的语法错误,WordPress的代码是
我用了一段时间,看起来运行良好。但是,我一直在 Mac 上的 Safari 或 Firefox 中查看结果。前几天,我在 IE(在 PC 上)中打开了一个这样的滚动页面项目,它完全无法工作。点击页面链接只是像标准链接一样打开到这些页面部分。是的,我知道很多人会说“对我来说完美运行”,但有人知道为什么会这样吗?谢谢。
我的天哪!!!
感谢 Devin Sturgeon!!!
它运行良好。
感谢这篇文章;一个很棒的发现。非常简单的实现。
以下是我网站上的结果:leejohnson.it
运行良好。谢谢!
很棒的技巧,节省了我一些时间:-)。
如果我想点击菜单中的一个子项并重定向到另一个页面并平滑滚动到特定的 div?如何修改代码?
很棒的脚本。如何将这个和水平滚动的那个结合起来? :)
谢谢 Chris!在此添加一个改进建议。
如果在
return false;
部分的正上方添加这行代码…history.pushState({}, "", this.href);
这会将锚点添加到 url 中,允许用户共享指向这些锚点的链接。 <3 <3 <3
感谢您分享这行代码!我同意能够共享链接。谢谢!
感谢您添加此功能!如果不添加这行代码,我无法在 WordPress 中使其工作! <3
也感谢 Vero!从 SEO 的角度来看,这是非常重要的一步。
感谢分享!!
嗨。鉴于当今流行的一页网站风格……多个部分的顶部确实需要链接。所以这种方法似乎有效。但是鉴于 HTML 5,我该如何让 **** 工作。这似乎仅适用于包装在 a.href 中的内容。
例如我的代码
团队成员
在您的 body 标签中
或在您顶部的 div 上……写…
然后在您底部的列表导航链接上…
返回顶部
它在 Chrome、IE、FireFox 和 Safari 中都能运行
嗨,
我有一个这样的场景问题:我希望滚动侦测仅对菜单项组合,例如。组合区域结束后,我希望它成为活动项。然后我还有另一个与组合无关且不在我的菜单中的区域,因此此处菜单中的任何项目都不应处于活动状态。然后我有联系区域,其中联系项在菜单中处于活动状态。
所以问题是,在组合项目处于活动状态后,它会保持活动状态,直到我滚动到联系区域。然后活动项目更改。
我知道这很混乱.. 但如果您知道解决方案,请帮助我。我希望菜单项的活动状态针对特定高度或区域激活..
例如,在此模板中:在您滚动到“工作”区域后。它被选中,然后是推荐,然后是价格表,它没有被选中,然后再次是联系,菜单项被选中。
http://wunderkind.originthemes.info/demo/home-3.html
谢谢,
这是一个很棒的脚本!我已经多次使用它了,但我想知道是否可以使用此脚本将href=”#anchor”替换为类似onclick=”window.location.href=’#anchor’;”的东西???我稍微调整了一下你的脚本,也做了一些研究,但还是搞不懂!
您不应该从处理程序中
return false;
,而应该e.preventDefault();
来保持传播。非常准确,谢谢。
一开始在使用它导航 WordPress 存档页面时遇到了一些问题。但是我注意到,当我在我的链接和目标中使用 the_title(); 时,类似 1980’s 的日期链接在帖子的 slug 为 1980s 时不起作用。愚蠢的错误,但在所有浏览器中都能正常工作。
非常感谢!我找了很久,找不到像这个一样好的东西。我只是将它复制粘贴到我的 HTML 文件中并更改了滚动速度,它就起作用了!
这是来自亚洲的朋友,
我爱上了你的代码
非常感谢兄弟;)
第一次点击后它运行良好。但我无法让它在第一次点击时运行。在第一次点击时,我的页面不会平滑滚动。它只是跳转到该部分。之后,它运行良好。为什么会发生这种情况?
运行良好,但妨碍了我其他之前运行良好的 jQuery 函数正常工作。这些函数添加和删除了类。使用此脚本后不再起作用。
出于某种原因,此脚本破坏了我的嵌套评论。我正在使用 html5blank wordpress 主题。不知道如何解决。有什么想法吗?因为我被难住了
哇哦哦哦哦哦哦哦哦哦!!!!!!
尝试了数千次后……它真的起作用了……非常感谢!!!!
有没有办法在地址栏中保留哈希链接,并使其能够仅使用“#”平滑地向上滚动到顶部?
你已经得到答案了吗?我有一个非常好的解决方案,我在每个网站上都使用它,在页脚中有一个向上滚动按钮,该按钮在滚动一定距离后出现……告诉我,
再见,Mary
Chris,你的脚本奏效了。它真的有效!非常感谢。
感谢您提供简洁易懂的代码。我稍微调整了一下,以保留 URL 中的哈希值。
动画完成后,将哈希值添加回 URL。
jQuery('a[href*=#]:not([href=#])').on('click', function () {
if (location.pathname.replace(/^\//, '') == this.pathname.replace(/^\//, '') && location.hostname == this.hostname) {
var target = jQuery(this.hash);
target = target.length ? target : jQuery('[name=' + this.hash.slice(1) + ']');
if (target.length) {
jQuery('html,body').stop().animate({
scrollTop: target.offset().top
}, 1000, undefined, function () {
location.hash = target.selector.substr(1);
});
return false;
}
}
});
嗨。我的网站遇到了一些小麻烦。我有一个主导航菜单,不同的部分有一个子菜单。当我仅使用主导航链接时,此代码完美运行。但是,在使用子菜单后,它具有默认功能,单击主导航链接时,阻止默认行为不起作用,我的页面使用默认行为导航到该部分。
您知道为什么会这样吗?
我认为使用双引号的
('[name="' + this.hash.slice(1) + '"]')
比('[name=' + this.hash.slice(1) + ']')
更好,因为如果您有一个带有空格的名称(例如“纽约地图”),它不会崩溃。当我插入时,它完美地工作了,并且正是我需要的。非常感谢!
嗨,
这对于我的菜单来说很棒;但是,动画滚动干扰了我页面底部拥有的 JQuery UI 选项卡。干扰仅在页面下方内容推动页面进一步向下时发生,因此我目前在那里留了一些空白空间以防您想查看。我如何将 JQuery UI 选项卡锚标记排除在滚动之外?
我修复了它!谢谢。
我使用这个,用于单个导航
$("nav").on('click','a',function (event) {
event.preventDefault();
var elAttr = $(this).attr('href');
$('body,html').animate({
scrollTop: $(elAttr).offset().top
},700);
});
它起作用了。谢谢!
非常好的帮助我..提前感谢
对于所有尝试使此功能与 Boostrap + Carousel Controls 一起使用的人,只需修改此行的第一行即可
谢谢这个!使用 JQuery 选项卡,这解决了我的问题。:)
谢谢!这完全是我需要的解决方案。
谢谢!快速简单的实现,立即生效 - 并为我节省了大量精力。
代码运行良好,但查看演示,“CSS 标题”区域的 #top 链接并没有完全滚动到此区域。我需要调整代码的哪一部分才能实现这一点?
嗨,
我喜欢这个脚本,因为它更容易理解并且运行非常快
谢谢
嗨!
这个小片段运行得非常好!
不过,只有一个问题:当我点击我的页面内链接并让我滚动到页面中所需的位置,然后尝试手动滚动时,手动滚动不起作用,直到我“赶上”我在页面上的位置。
谁能帮忙吗?
调整了代码以支持带有点的锚 ID。
不错!
评论表单应该在评论之前哈!..
嗨,伙计们,我想知道是否有办法使此插件反向工作。
当我第一次使用它时,它可以工作,但是当我到达我在导航栏中第一次点击的命名锚点并尝试向上或向下平滑滚动时,它不再平滑滚动。
提前感谢。很棒的插件。一切顺利!
非常感谢,它运行良好:)
嗨,
我想知道是否有办法让它适用于不同页面上的锚点?
阅读了评论,但找不到解决方案。
例如:
<a href="faq.php#new" rel="nofollow">新常见问题解答</a>
应该打开页面并平滑滚动到锚点。在同一页面上,脚本运行得非常完美。
嗨..干得好..你能告诉我如何使用鼠标滚动加载相同的 div 吗?
这可能就是您正在寻找的。此站点提供一个模板,带有“平滑”滚动效果的视差网站供下载。
http://iiiji.com/developing-parallax-smooth-scrolling-website/
我第一次点击我的链接时,它从未平滑滚动。但是,每次(第二次、第三次、第四次、第 900 次……)它都能完美地工作。我猜这是加载顺序的问题?任何帮助将不胜感激。
忽略我上一个评论,代码没有问题。问题是由我的浏览器设置引起的……
Chris,感谢你提供这个很棒的脚本。但它在我的移动设备上不起作用。我该如何解决?我们的网站是响应式的,但当我将窗口大小更改为小于 600x 宽度时,脚本就不再起作用了。有人知道如何解决这个问题吗?提前感谢!
http://elearning.theleansixsigmacompany.com/my-training/directions/
非常感谢你的帮助!这运行得非常完美 :))
非常感谢您在解决设计问题方面提供的帮助。
对于任何希望在用户滚动时激活导航选项卡的人
我刚刚添加了一个函数,在您滚动时激活导航选项卡,这里有帮助我的代码链接。
http://codetheory.in/change-active-state-links-sticky-navigation-scroll/
太棒了!!!谢谢!!!
我在我的网站上使用了它,但它不起作用……任何人都可以告诉我为什么吗??
对于那些使用 bootstrap 并希望停止与其他 jquery 锚点(如选项卡)的干扰的人,这里有一个快速修复。
更改此行
为此
然后将类 page-scroll 添加到您的 a href 标记中。
这将只动画化具有类 page-scroll 的 a href
我(在帮助下)在侧边栏的小部件中添加了一个自动滚动功能。我想为某些需要不同滚动速度的帖子单独添加它。我无论如何也弄不明白。这里所有这些滚动代码,我甚至不知道该把代码放在哪里。在 CSS 编辑器中,在帖子本身中?显然,我对代码了解不多。
我用小部件简码解决了这个问题,并且运行良好。它是一个名为 Widgetize Pages Light 的插件。
代码运行良好,并且非常易于实现!我需要帮助。根据选择的菜单项,滚动后,用户的光标可能会停留在具有鼠标悬停事件的图像顶部。如果发生这种情况,则会执行鼠标悬停,并且非常烦人。有没有办法将光标移动到左边缘,以便光标不会停留在鼠标悬停图像上?
如果 html、body 有 overflow:hidden,则不起作用
我使用 HTML5 并看到如果将代码放在书签之前的 <body> 中,则代码可以工作,因此
有人在使用
:target
CSS 选择器和此代码时遇到问题吗?它似乎忽略了我的选择器(试图触发动画),并且所有内容都在没有脚本的情况下工作。嗨,Mark,
目前正在使用此代码实现
:target
CSS 选择器,并意识到它破坏了显示隐藏 div 的动画行为。你找到解决方案了吗?
谢谢!
不用了!从周围的一些评论中了解到。只需添加
在最后的 if 语句中。
你帮了我很多,非常感谢 :) :)
此代码在 Internet Explorer 8 及更高版本中不起作用...请帮助……
谢谢。你太棒了!!!
很棒的例子,Chris!我做了一些修改,并创建了一个用于流畅平滑滚动的自定义Angular指令。谢谢!
有没有办法修改脚本,使其在页面完全加载后自动滚动到第一个锚点 ID?
为了回答所有遇到冲突的人,例如 Bootstrap Tabs 不再工作或它破坏了另一个滑块/滚动器。解决方案
使用 rel 激活平滑滚动,通过设置 rel = …
示例
<a href="#contact" rel="nofollow">
nofollow?当然应该滚动。并将代码从
$('a[href*=#]:not([href=#])').click(function() {
更改为
$("a[rel^='scrolling']").click(function() {
祝你好运!
Melroy
我刚刚遇到了这个问题,一直在绞尽脑汁想该怎么办。但这非常有效。谢谢 Melroy。
你好!我按照说明操作,但还没有让它工作。不知道哪里出了问题。
嗨 Davin,
我怎样才能只让菜单栏链接生效?目前的代码通过带有 # 链接的选项卡面板来干扰。
如何在每个 id 部分添加类
大家好。感谢大家提供想法和代码。我正在尝试在我的页面上使它工作,但我无法弄清楚如何使滚动停止在我现在在示例中停止的位置下方 160px 处。就像我有一个始终显示的标题,并且平滑滚动应该在该标题下方停止。尝试过通过 css #page-wrap,以及不同的 #anchors-id,但都没有效果。它总是向上滚动到底部。有没有什么想法?非常感谢提前。
嗨,我再次尝试了……发现了一些东西。因此,在进一步搜索该主题后,我认为它必须是 JavaScript 中的东西。问题是,我对 HTML 还可以,对 CSS 还可以,对 php 也还可以(或者大多数时候……)但不是 JavaScript 达人。
我该如何正确地做到这一点?
…
{scrollTop: targetOffset – 100}
…
这正确吗?
…
$(function() {
$(‘a[href*=#]:not([href=#])’).click(function() {
if (location.pathname.replace(/^\//,”) == this.pathname.replace(/^\//,”) && location.hostname == this.hostname) {
var target = $(this.hash);
target = target.length ? target : $(‘[name=’ + this.hash.slice(1) +’]’);
if (target.length) {
$(‘html,body’).animate({
scrollTop: target.offset().top-160
}, 1000);
return false;
}
}
});
});
…
我将菜单设置为固定位置的点,有没有快速的方法添加一个具有不同样式的活动类,以便每当用户在部分上方滚动时,正确的点都会改变外观?
缺少“=”。
应该使用“===”而不是“==”。
我已将代码粘贴在下面。
/* 平滑滚动 */
天哪,太简单了,太干净了!非常感谢!
你好。我是网页开发新手,所以只是想完全理解你的代码。在阅读这篇文章之前,我编写了一个平滑滚动代码,如下所示:
并且要将滚动动画化到特定元素
我试图理解为什么你的代码是这样的:
if (location.pathname.replace(/^\//,”) == this.pathname.replace(/^\//,”) && location.hostname == this.hostname) {
var target = $(this.hash);
……..
这些代码行的目的是什么?
它在我的网站上完美地工作了!!太棒了!
但是谁能解释一下它是如何工作的
你太棒了,Chris!感谢这段很棒的代码片段;它确实帮助我完成了今天必须处理的一项任务!
它运行得非常棒!非常感谢。
大家好。我的网站是 lovatotribe.com,脚本无法运行 :/ 出了什么问题?
尝试使用 document ready,脚本在其他元素之前加载,并且可能与其余 js 发生冲突
什么是 document ready?我不太懂 js 和脚本
https://learn.jqueryjs.cn/using-jquery-core/document-ready/ 但是如果你不擅长 js,我建议你付给某人 10 美元左右来完成它,WordPress 可能存在一百万个原因
这是我网站上唯一需要 jQuery 的东西,因此我试图找到一个纯 JS 解决方案,以便停止在我的网站上使用 jQuery,但我还没有找到任何与 jQuery 解决方案一样流畅的东西。是什么让 jQuery 的滚动如此流畅,有没有人知道一个好的 JS 解决方案?
太好了,它起作用了。我爱你。哈哈
这个脚本太棒了。
哇,对我来说效果很好!我目前正在复制 Bootstrap 网站上令人惊叹的侧边栏(https://bootstrap.ac.cn/components/),这是一个超级有用的步骤。谢谢!
如果使用哈希 URL,可以执行相同的操作吗?
例如。“css-tricks.com/examples/SmoothPageScroll/#two”
我有一个页面,其中包含一个目录,并且正在寻找一个解决方案来解决锚链接显示在历史记录中的问题(用户点击后退实际上并不会带他们“后退”,而只是带他们回到他们在页面中的旅程)。
在花了两小时摆弄 javascript window.location 和 scrollTo 之后,我找到了这段简单而完美的代码,所以谢谢,谢谢,非常感谢。
如果有人在使用固定菜单时遇到问题,因为它会滚动到某个部分,然后当你再次点击相同的链接时会滚动回来,只需将 target.offset().top 更改为 document.querySelector(this.hash).offsetTop。
它将如下所示。
你在你的 CSS 中使用了
overflow: hidden
吗?即使使用 overflow-x,它也可能导致滚动根本不起作用。对我来说,删除它就起作用了!Chris,如果我可以提一个关于可访问性的建议,值得修改它以包含键盘的焦点,并更新 URL。
参考
http://www.sitepoint.com/learning-to-focus/#the-result
对于那些在滚动后遇到元素突出显示问题的人,只需在 return false 之前添加以下内容
document.selection.empty();
return false;
我有一个网站,在其中更改了 div 的大小。当重新定位 div 时,会收到一个新位置。在这种情况下,此平滑滚动脚本不起作用。请帮助我。非常感谢。
非常感谢,它运行得很好!
SquirFly,非常感谢!
我已将此添加到我的 Weebly 建站网站中。(我是新手)。它可以工作。我遇到的问题是它会跳转到该部分。我无法让它滚动。加载了一个用于缓动的动画查询。网页是http://www.jrs-spiceco.com
任何能帮我解决这个问题的人,都可以获得免费香料。
一旦我在 Safari 中访问了该网站,向下滚动现在在 Chrome 中也能正常工作了。但它不会缓慢地滚动回顶部。
由于尝试添加粘性内容,不得不重新加载。现在无法让滚动做任何事情,只能跳转。
你好
当我将“return false”更改为“return true”时,每次单击菜单时我的网站都会闪烁。
有什么解决办法吗?
如果有人遇到此问题。在基于 Bootstrap 的网站上全局使用此代码会导致 Bootstrap 手风琴停止工作(基本上任何在 href 中使用 # 的内容)。无论如何,我的解决方案是添加这个
到代码片段的第 2 行。
#accord 是我用于触发每个手风琴的 # 的开头,例如
它是 WordPress,所以
输出 #accord2126(或任何帖子 ID)。
然后,新的平滑滚动代码会忽略任何以 #accord 开头的 #,现在我的手风琴可以工作了 :)
当然,如果您以 #accord 开头任何其他 #,它们也将被排除在外
非常感谢 Vanv 的这个技巧。我一直在寻找这个,它节省了我的时间。它现在可以与所有与之冲突的 Bootstrap 元素一起工作了。
再次感谢! :)
嗨
脚本运行得很好,
但是,当我单击指向 h2 标签的链接时,它会跳转到 h2 标签之后。而不是准确地跳转到它应该到达的 h2 标签。
关于在折叠“显示”后触发此操作的任何想法/建议?
使用 Bootstrap 3,因此 shown.bs.collapse 事件应该可用,只是不确定最简单的实现方式。
感谢分享!还要感谢 vanv 指引我找到了正确的方向,避免破坏我的网站(我完全错过了与手风琴的糟糕交互)。优秀的帖子! :)
太棒了!谢谢!jQuery.scrollTo 不适用于移动菜单,但你的脚本正在运行。
谢谢!这对我很有帮助 :)
嗨,
有人遇到 Bootstrap 下拉菜单切换的问题吗?
我的菜单在单击链接后不会关闭。
将上面的代码放在一个代码标签上方。
HTML:你想要的任何文本
#contact 是我的锚标签,你应该根据你想让它跳转到网站上的哪个位置来更改它。
嗨,Chris,
你可能想添加一个注释,说明如果你关心可访问性,则不能使用此处发布的代码。这会劫持正常的浏览器行为,并且不会在带有锚点的 div 上设置焦点(即使你设置了 tabindex="-1")。参考 URL 有几个可以实现可访问性的版本。
谢谢! :)
嗨,我尝试在我的网站上使用本教程,该网站还包括对角线滚动(我在 js 中添加了 'scrollLeft:target.offset().left')。它运行完美,直到我在 css 中添加 'overflow:hidden'。之前有人回答过使用 '$.noConflict();',但它在我的代码中不起作用。有人可以帮我让代码与 css 中的 'overflow:hidden;' 一起工作吗?谢谢。
再次您好,
我更改了代码中的几件事,它像魅力一样工作了。我不再使用 '$.noConflict();' 了。我将所有 '$' 更改为 'jQuery',并将 css 中 body{} 的 'overflow' 属性更改为 'hidden'。代码按我想要的方式工作。非常感谢,你的代码拯救了我的项目!
此外,对于那些希望在网站的特定部分进行滚动的用户,只需为该部分的 css 添加高度和 'overflow:auto;'。
是的,我在 Devin 的代码上工作。
感谢 Chris 和 Devin。
当锚链接中包含“.”字符时,这似乎不起作用。我尝试将其整合到我的网页模板中,目录中的子部分链接(由 pyHat 创建)包含“.”,对于这些链接,此脚本不起作用。它适用于其余链接。任何建议将不胜感激。
从未使用过 CodePen,它太棒了……无论如何……
我为你提供了一个示例……
我是巴西人,所以如果我说的有什么不对,请忽略它哈哈'
http://codepen.io/anon/pen/avdeqx
(没有阅读所有评论,所以不知道是否有人已经说过)
许多用户会讨厌你用这个 JavaScript 替换标准的 HTML 行为。这篇文章应该有一个大的免责声明。不应该做这样的事情。这是基本功能,不要更改它。
当页面上存在两个具有相同“href 锚标签”的链接时,页面会向上滚动到顶部,然后向下滚动到锚标签,而不是只停留在锚标签处。
有什么想法可以让他们停留在同一个 #锚标签上吗?
http://testing.apliiq.com/custom/pocket-tees/crew-neck-pocket-tees
嗨,我该如何在我的网站上使用它。我是一个新手,所以我不知道该怎么做,我真的很困惑-_-
感谢代码,运行得非常好。
是否可以从滚动中排除一个类?谢谢
我为此创建了一个插件,它利用 Popmotion 而不是 jQuery
https://github.com/Popmotion/scroll-to
你好,Chris,
我使用了这段代码,它运行完美。但我注意到它在 jQuery 的新版本上不起作用。你是否有更新的代码可以在 jQuery 的新版本上运行?
大家好,如果我在 jQuery 正在执行动画时尝试滚动,我遇到了页面跳过的问题。我为此添加了一小段代码来取消用户干扰(鼠标滚轮、向上或向下箭头等)时的动画。
我没有使用“顶部”,而是使用了一个 Font Awesome Chevron,我该如何在原始代码中合并某个页面点的淡入/淡出效果?
谢谢
作者,你是神。我是一个学习者,这让我的一天变得美好!请继续努力。
嘿,这很棒。谢谢!
你好,
我有一个固定标题,并希望它滚动到标题底部,Frank 上面的回复已经解决了这个问题,但我不知道如何组合这些代码。
感谢您的任何帮助。
说早了,我搞定了。
嗨,
我试图让它与选择下拉菜单一起工作,但我一直无法使其工作。你知道如何让它工作吗?
SquirFly 的评论有效。
非常感谢!
运行完美,谢谢!
$ 和 animate 不是 js 原生函数,此示例不起作用!
如果您使用的是 WordPress 或新的 jQuery 版本,只需将代码片段中的所有 $ 符号更改为 'jQuery' 即可,它应该可以工作,可以使用 WP 版本的 jQuery,并且不需要嵌入旧版本来支持 $ 符号
我希望同时使用平滑滚动和 :target 技巧,但平滑滚动技术会从 URL 中删除 #anchor,因此 :target 不会触发。关于如何修复的任何想法?
http://emdac.org/chest-pain.html
参考链接是我试图使其正常工作的内容。
有用!
非常感谢!您的说明非常有效。
你好
脚本的各种演变都运行良好(至少作为最终效果),我恳请的是,当我点击返回顶部的链接时,在地址栏中,主页 URL 会添加 #namelink
有没有办法避免这种情况?或者它不应该出现?
谢谢
罗伯特
如果您有一个静态导航栏,您的锚文本可能会被它覆盖。我通过从 scrolltop 中减去 70 来修改。
我还将 1000 更改为 500 以加快动画速度(半秒而不是一秒)。
bootstrap 出现手风琴错误,请帮忙 :(
完美..运行良好。
谢谢
嘿,刚刚注意到这在 jquery 1.12.0 中不起作用(这是最新 html5 样板使用的)。
在 1.11.0 中运行良好。只是想让你知道!
干杯。
@Devin Sturgeon :- 谢谢你的代码,对我来说运行良好!
这是剪辑的一个稍微好一点的版本
谢谢兄弟,它起作用了。
非常感谢!效果很好
嗨,我想知道是否可以从“target”中减去一个值以在它应该结束之前结束滚动。例如
target = target – 80;
提前 80px 结束滚动。我一直在尝试解决这个问题,但没有成功,有什么想法吗?
非常感谢 :)
感谢分享,效果很好。
提醒一下!如果有人遇到 JS 错误
未捕获错误:语法错误,无法识别的表达式:a[href*=#]:not([href=#])
我更改了
a[href*=#]:not([href=#]
为
'a[href*=\\#]:not([href=\\#])'
它出现在我维护的 WordPress 网站的 4.5 更新中
你拯救了我的生命,伙计。更新到 4.5 后,我的一半脚本无法工作。我将问题缩小到这个,进行搜索,然后 BAM - 你有答案。非常感谢!
更好:使用引号
a[href*=”#”]:not([href=”#”])
https://github.com/jquery/jquery/issues/2824
https://www.w3.org/TR/css3-selectors/#attribute-selectors
谢谢!!!!
只有当我向下滚动时它才起作用,但当我向上移动时它不起作用?
$(function() {
$(‘a[href*=#]:not([href=#])’).click(function() {
if (location.pathname.replace(/^\//,”) == this.pathname.replace(/^\//,”) && location.hostname == this.hostname) {
var target = $(this.hash);
target = target.length ? target : $(‘[name=’ + this.hash.slice(1) +’]’);
if (target.length) {
$(‘html,body’).animate({
scrollTop: target.offset().top
}, 1000);
return false;
}
}
});
});
如果您正在使用 WordPress 并升级到 4.5 版,请确保您在第一行转义特殊字符以防止错误。这里有一个快速说明:https://www.wpcover.com/upgraded-wordpress-4-5-syntax-error-unrecognized-expression/
花了很长时间才找到一个 jQuery 解决方案,该解决方案实际上可以在 Internet Explorer 中工作,并且不会简单地跳转到 #
非常感谢!
哟,这个在我第一次尝试时就起作用了
出于某种原因,这在我的网站上使用 WordPress 4.5.2 更新后停止工作了。
我同一个 JS 文件中的所有其他脚本都继续工作。
非常感谢!
不错
我真的不明白仅仅为了那些已经知道如何使用 Javascript 的人制作教程的用处。我不知道如何使用 Javascript,这个教程对我来说没有任何意义,结果?毫无意义。我获取你的代码,我将其粘贴到内部,但它不起作用,显然,你认为某些事情是理所当然的。
我不明白以这种方式批评共享代码(就像代码可能会更改一样)的用处,免费的。我没有看到它在哪里说“教程”,在哪里说“通过这个你可以学习使用 javascript”。它是一个代码片段,而不是教程。而且它并没有从每个人都容易理解的想法开始(尽管这个很简单)。再说一遍,作者免费分享,所以也许多一些尊重和阅读说明。你因为你的“复制粘贴”没有付出努力,可能是在一个现成的 WordPress 主题或类似的东西上,它不起作用而生气?真的吗?拜托! :)
没有用处 - 只有沮丧。感谢 @css-tricks.com 的各位为我们所做的出色工作!幸运的是,没有像 elena 那样不尊重你们工作的人(就像 Diego 说的,免费的)。
@elena 如果你不知道 javascript,那就去学习或参加一些在线课程。一旦你掌握了基础知识,你就会理解如何破解这个脚本。这是一个代码片段,而不是教程。尊重他人为社区所做的工作。
当您的网站启用了水平滚动时是否可以执行此操作?似乎不起作用,它仅在网站垂直滚动时才起作用
我使用此脚本(感谢 Chris!)。
我没有看到其他人发布过这个,所以就这样吧。
我们需要转义“#”以避免任何错误。将查询更新为此
$("a[href*=\\#]:not([href=\\#])").click(function() {…
非常好,对我有用
嗨,Chris,
它对我的网页运行完美,感谢分享代码..
你好,
我有一个问题
我的网站上有固定标题。
现在滚动应该在锚点前 100px 停止。这可能吗?
谢谢。
此致。
Bernd M。
只需在 scrollTop 行的末尾添加一个像素值。
例如 scrollTop: target.offset().top – 100
谢谢,Callum!
它正在工作。
我一直在尝试让它与水平滚动一起工作,但没有成功。有什么建议吗
它完美地工作了!非常感谢!
我是一个完全的新手。感谢您的代码。效果很好!
但我在结合 jQuery Popup Overlay 时遇到冲突。滚动功能禁用了弹出窗口。我认为可能是它们都具有未命名的函数。我对命名函数感到困惑。
如何命名您的函数并执行它?
嗨!优秀的代码。
有人可以帮忙解决如何在 BS Carousel 中使用此代码段的问题吗?它也使用哈希,每次我尝试按下轮播上的左右按钮时,它都会向上滑动一点到 div 开始的地方。
任何人都可以建议任何东西吗?
我自己也是新手;)
任何人都可以为此提供纯 CSS 解决方案吗?
谢谢 Chris。这是我的贡献——根据滚动的距离动态加快滚动时间,获取目标元素距顶部的距离。根据需要更改最大和最小滚动时间。
精彩的代码段!
@mrhorse,我使用了你的版本。一开始,我以为它没有反过来工作(页面平滑向上滚动);然后我将 baseMinScrollTime 的值更改为与 baseMaxScrollTime 相同的值,然后……瞧!
“我的示例”
我将尝试将其整合到一个包含 Bootstrap 组件的项目中……因此我将测试在此线程中发布的各种针对此类情况的建议。
再次感谢 @mrhorse……也感谢你,@Chris。
Ess
好的……所以在我在其上工作的 Joomla!项目中不起作用。尝试将其放在之前,之前,在自定义 javascript 部分……什么也没有。
对此的任何帮助将不胜感激。
Ess
谢谢 Chris,效果很好!
此致
Ronald
所以这个 jquery 代码段一直都在我身边。我喜欢平滑滚动。尽管只是将代码段放入我的 init.js 脚本中,该脚本在文档就绪时执行。
在我正在做的一个网站中,我实现了 materialized css/js,以及在菜单项点击时关闭我的菜单的 jquery 函数,所有这些都在我的脚本中的 jquery 中。但是,当我将此代码段添加到我的 init 脚本时,即使我的菜单项被点击后,我的菜单也会保持打开状态。一直在 firebug 中寻找错误,但没有结果我知道这是因为 jquery 代码段中有一些东西导致了它,只是不知道它可能是什么,有什么建议吗?
感谢 Chris Coyier 和 Devin Sturgeon,
它工作正常,无需在代码中添加或删除任何内容。
谢谢这个。一直运行良好,直到最近。现在,在第一次点击时,它会向下滚动到它应该滚动到的部分上方约 700px。任何后续点击都会滚动到正确的位置,只是第一次点击很奇怪。
使用 jQuery 3.1.0 和 WordPress 4.6.1
谢谢 Charlotte :) 但是,我不得不使用兼容模式才能使其在 WP 中工作——将所有“$”符号替换为“jQuery”.. 使用 WordPress 4.6.1–en_GB .. 奇怪.. 但我不知道我在做什么;)
这对我来说真的有效。谢谢老板
很棒的作品。感谢分享!
尽管给出了 jQuery 代码的参考,但谁能告诉我如何使用 javascript (window.scrollBy) 来实现它?
显然,将 onclick 应用于包含 (window.scrollBy) 的函数似乎不起作用……有什么建议吗?
我意识到提供的代码存在问题,因为它没有为我工作。特别是第一行代码
$(‘a[href*=”#”]:not([href=”#”])’).click(function()
现在,此选择器无效。# 是一个特殊字符,需要像 a[href*=#]:not([href=#]) 那样转义
见 https://api.jqueryjs.cn/category/selectors/
希望它能帮助某人某处
抱歉,实际上它应该是像 a[href*=\#]:not([href=\#]) 那样,在 # 前面有那些 \
如果 # 未加引号,是的,它需要用 / 转义,但在此处提供的代码中,它已加引号,因此不需要。查看页面底部的有效演示。
谢谢朋友 :)
如何使它在按钮点击时工作,这只在锚标记上工作
这里是否有任何代码不会破坏锚点 url 功能?
帖子中的代码不会在 URL 末尾添加 #location,而那些添加的代码不支持后退/前进。
它们都坏了。
嗨,Chris,
如果页面使用 lazyload(图像),则滚动位置错误
那么 lazyload 的代码是错误的,您应该在 img 标签属性中添加图像高度和宽度,以便它已经占用适当的空间。
代码运行得很完美。我只是复制了代码,没有做任何修改,它就完美地运行了。
但是为什么此网站的评论没有分页!!我不得不来到此页面的底部才能发表此评论。
如果“发表评论”部分位于顶部或存在一些分页,那就太好了
我正在使用 shopify - debut 主题。我想在主页的几个部分进行平滑滚动。已经完成了必要的锚点,目前菜单按钮会跳转到各个部分而不是平滑滚动。
将以下代码插入 theme.liquid 但它对我不起作用。
谢谢,我使用了你的平滑效果,它太简单了。
嗨,
此代码运行得非常好!但是我遇到的唯一问题是它出于某种原因阻止了我的 Bootstrap 模态工作。
任何想法为什么/如何解决这个问题?
谢谢,
Alex
好的……进一步补充我在 2016 年 10 月 30 日 的评论,我很高兴地说我在我的 Joomla!项目中使其工作。我只需要将脚本包含在 $(document).ready(function() {此处代码}) 中。
再次感谢您让我的编码生活变得轻松一些。
Ess
好吧,尽管这看起来像一个简单的解决方案,但它会与您的框架(如 Bootstrap)发生冲突,这些框架使用任何 #锚点。
这也解释了为什么您会在使用锚点的菜单、模态和其他脚本中遇到问题。
因此,例如,BS 选项卡将无法与此代码一起使用。
可惜,但我无法使用。
这段脚本运行良好,但前提是我需要从 script 标签中移除 defer 属性。async 属性也会导致脚本停止工作。有没有办法在保留其中任何一个属性的情况下让它正常工作?
我相信正确的版本是
$(document).scrollTop($(document).scrollTop() + $(‘a[name=”target”]’).offset().top)
它在移动设备上也能正常工作!
嗨,Chris,
我注意到代码存在一个问题。第一次点击导航链接时,它运行良好,但问题在于多次点击时。例如 - 有 5 个导航链接(固定在顶部),假设你点击了第 3 个链接 10 次,然后快速点击第 5 个,再点击第 2 个或任何其他链接,页面就不会滚动或快速响应,因为你是在第一次点击的导航链接后点击的其他链接。它会在多次点击第一个链接后等待一段时间,就像它仍在计算这些多次点击一样,然后它才会计算对其他导航链接的点击。你的整个页面开始根据你的点击和页面上的目标来回动画。
请提供解决此问题的方案。
我希望我的表达清楚,如果不清楚,请随时提问。
谢谢
上面提到的任何滚动解决方案如何与其他事件一起工作?例如,假设在 onClick() 中,我想 a.) 平滑地滚动到页面上的某个位置,以及 b.) 隐藏其他元素?简单设置页面锚点并简单地点击链接以使用简单的 HTML 平滑滚动到位置的日子已经一去不复返了。就像光纤一样,这让我感到悲伤。
我注意到的另一件事是,在这种方法中,点击链接后,锚点会保持“活动”状态……嗯嗯
伙计,这太棒了!出色的工作!
想请教任何能提供帮助的人一个快速问题。
我一直在更改动画时间,但无法成功减慢滚动速度……抱歉,我还没有时间自己深入研究这个问题,但希望有人知道解决方法?
最简单的 CSS 方法之一 - 将 overflow 属性附加到 body 元素,然后将 scroll-behavior 设置为 smooth。在 FF 中运行良好 :)
嗨,我知道这是一篇很旧的文章,但如果你有像
<a href="/#anchor">Anchor Text</a>
这样的 href,你能解释一下如何执行它吗?因为当我没有斜杠时,它可以正常工作<a href="#anchor">Anchor Text</a>
。请看这里的差异。如果有一个简单的解决方法,我将不胜感激。https://jsfiddle.net/ayanize/vu5bxh85/3/ - 不起作用
https://jsfiddle.net/ayanize/sc92tL8L/23/ - 起作用
顺便说一句,感谢这篇文章。
据我所知,
<a href="/#anchor" rel="nofollow">
不是正确的 HTML。<a href="#anchor" rel="nofollow">
- 正确<a href="/link_to_another_page" rel="nofollow">
- 正确<a href="/#anchor" rel="nofollow">
- 不正确嗨,
我在我的页面上使用了这段代码,它开箱即用。但我有一个问题:当我点击一个链接时,脚本会自动选择它链接到的部分。我不喜欢这样,有没有办法阻止选择?
非常感谢。
嗨,注意到同样的问题。如果你注释掉/删除以下几行,它会移除焦点。我不知道这会如何影响其余的功能,但至少对我来说它似乎可以工作 :)
对页面内链接完美有效。
URL 怎么办?我无法让它在指向其他页面的链接上工作
例如 /new-page.php#bottom
这可能吗?
在 return false; 之前添加此代码以更新浏览器 URL。
window.location.hash = this.hash;
是否可以在具有 overflow-x hidden 的 div 内的锚链接上平滑滚动?我想制作一个滑块,点击按钮时滚动到下一个锚链接。但是,平滑滚动发生在窗口滚动条上,而不是 overflow hidden div 上的滚动条上。
在最新版本的 Chrome 中,上面的 jQuery 版本的平滑滚动会导致在哈希链接的锚点源项目周围出现一条粗蓝色的边框。
因此,如果我点击带有哈希标记的链接,它会将我跳转到该部分,然后在它周围放置一个蓝色边框。这仅在 Chrome 中发生。其他浏览器似乎不会这样做。
有什么想法吗?我不想全局隐藏 ::focus outline,但这是我唯一能想到的解决方法,并且仍然让代码工作。
是的,是 focus() 函数。只需使用 css
element::focus{
轮廓的一些内容
}
…或者删除执行 focus 的代码。
蒂娜,只需删除这行:“$target.attr(‘tabindex’,’-1′);”;)
我将此添加到我的页面,是的,它现在可以平滑地滚动到同一页面内的给定锚点位置。
但这不是我需要的。
我希望它首先打开链接(以便它转到包含文章的页面),然后它需要向下滚动到该特定文章。现在它只是滚动到锚点位置,并且似乎不关心锚点哈希之前的任何内容。我使用 #g-mainbar 作为锚点(gantry5 / joomla)
我的导航菜单链接示例
1 -“http://www.xxx.nl/development/diensten/dienst1#g-mainbar”
2 -“http://www.xxx.nl/development/diensten/dienst2#g-mainbar”
3 -“http://www.xxx.nl/development/diensten/dienst3#g-mainbar”
因此,当我在主页上并想要阅读有关“dienst2”的信息时,我按下菜单按钮 2,它应该加载该页面,然后它需要向下滚动到该文章。我需要这种行为,因为每个页面的顶部都有一个全屏标题图像。我希望用户实际导航到的位置有更多的动画效果。
斯特凡,我需要同样的东西……你解决了吗?
一些使事情更顺畅的方法……
1) 大多数网站都有一个导航栏或其他需要偏移的东西。你可以在 CSS 中添加一个空链接作为锚点,如下所示
2) 提供的代码不会重置哈希,因此我通过 jQuery 添加了这些行
然后……滚动后,添加此行……
试试这个
听起来在最新版本的 Chrome 中存在一个错误,如果存在偏移量(对于固定导航栏),则会导致滚动跳跃。这似乎是焦点问题,这段代码
有没有人有解决方法?
谢谢!
这里也有同样的问题,我通过创建一个函数来解决它,该函数取消焦点时的任何滚动。
然后,你可以在 .focus() 的位置使用 .focusNoScroll() 来聚焦到元素而不会滚动到它。
如果对其他人有帮助,这是我的完整代码,它利用了上述内容,查看了我固定导航标题的高度(在滚动和响应时会发生变化)并相应地偏移滚动。据我所知,它按预期工作
非常感谢,可以确认这对我有用!
非常有用的脚本!
由于在短距离滚动时感觉有点慢,我添加了一种有点任意计算的公式来相对于距离减少滚动时间。
如何为点击时的目录(TOC)添加平滑滚动效果?
嗨。它运行完美,但有一个问题:是否可以在点击或页面滚动时设置活动菜单项?
此代码适用于 Shopify。
请记住,出于某种原因,对于 Shopify,你需要在结束标签之前添加自定义脚本。
我在一个法语网站上使用了这段代码。
id 是自动生成的,其中包含特殊字符。
我替换了这行代码
用这行代码替换
现在它运行得非常完美。
干得漂亮!
我正尝试添加一个额外的选项,使到达的部分闪烁(或显示任何其他类型的效果),使用 CSS 动画和伪类 :target。
但我无法使其工作,可能是因为 :target 无法与该脚本一起使用,因为脚本本身隐藏了 URL 锚点,因此浏览器无法将 URL 与目标关联……我错了么?
有人有解决方案(或可以建议一种方法)吗?不一定要通过 CSS。最好的方法(我认为)是在脚本中添加一些内容(例如应用于 CSS 类的函数),然后将该类分配给我们想要闪烁的元素。
很棒,易于理解的教程。一个问题,有人知道如何阻止浏览器突出显示正在滚动到的 div/元素吗?
你也可以用 CSS 实现
HTML
{
scroll-behavior: smooth;
}
哇哦!太棒了!谢谢各位!
关于 CSS 的平滑滚动行为……请不要使用,至少现在不要。
我已经在一个或多个使用它的网站上遇到了问题,大约一个月了。滚动效果很好,也很流畅,但在每次我使用鼠标滚轮时,它都会在滚动开始之前增加 500-1000 毫秒的延迟。
起初我以为是某些奇怪的趋势,在各个地方都使用了捕捉点,但昨天我自己尝试使用这个 CSS 属性时才发现是它导致的问题。
(至少对我来说)在当前版本的 Chrome 上,Windows 和 Ubuntu 系统上都会出现这个问题。
从无障碍性的角度来看,如果元素本身不可聚焦,那么添加
$target.css('outline', 'none')
的想法如何?如果你使用的是普通的锚链接,则不会在不可聚焦的元素(例如div
)上添加轮廓,因此我觉得这实际上会使功能更接近默认的浏览器功能。更新后的回调如下所示当然,如果正在滚动到的元素通常可以聚焦,我们不想删除轮廓。如果有人有任何理由说明为什么不想这样做,请告诉我!
感谢您撰写这篇文章。我只是想知道,当您提到 polyfill 解决方案时,纯 JavaScript 和 CSS 行为功能在 Safari 浏览器中是否不受支持:“您可能只有在执行与页面滚动相关的操作且无法使用 #target 跳转链接和 CSS 完成时才会使用此方法。”我似乎不明白 #target 跳转链接和 CSS 如何实现这种平滑滚动功能。我刚接触这个领域,所以非常感谢任何帮助 :)
不错的帖子,谢谢!
.not('[href="#0"]'
的目的是什么?我是否不知道 #(int) 的某些神奇用法?嘿 JP!这是一种方便的方法,可以排除任何 href 属性为 #0 的元素(即
Link
)。在这种情况下,这是一个锚链接(#0 将用户滚动到页面上id="0"
的元素),并且代码片段排除了任何目标为该 ID 的链接。关键是 ID 不能以数字开头。或者基本上不应该。因此,如果在链接上使用 #0,则它是一个无效链接,而不是像 # 一样跳转到页面顶部。
好的——这一切都很好……但是——存在一个大问题。我们如何通过单击菜单项和手动滚动到部分 id 来更新 URL?不幸的是,它只通过单击更新,而不是通过滚动更新。主要目标是获取新的更新的 URL 并进一步使用它,例如在多页/多语言环境中。有人知道如何在该工作脚本中实现它吗?
抱歉延迟了——我已经找到了我自己的问题的答案。
只需在 menuItems.click(function(e){} 中删除“e.prevent.default()”,并在 $(document).scroll(function(){} 中添加
“location.hash = ” + id” 在你添加/删除菜单项的活动类之前。
我为纯 JS 版本创建了一个简短的 gist:https://gist.github.com/hsnyc/6fca8b5c237ff80a650674680e0be082
我可以将您创建的这段代码用于具有商业用途的项目。
如果您允许,非常感谢您。
如果您不允许,也谢谢您。
是的,您可以随意使用。
嗨,效果很好。它似乎与 bootstrap-carousel 导航冲突。
我实现的网站尚未上线。
谢谢!这确实很有帮助。喜欢阅读关于无障碍滚动的内容。更好的用户体验是在滚动内容上方提供一个偏移量,以便它不会一直滚动到屏幕顶部。
我认为这很棒!
不过我有一个问题……
以下代码行的目的是什么?
如果目标没有长度,那么它就不会有哈希值……
这样理解有道理吗?
我不理解第二行的目的。您已经在下面的 if 语句中检查了目标是否具有长度。
在 HTML5 之前,锚点曾经有一个名为
name
的属性。该行代码尝试在无法在id
属性上找到可用哈希值的情况下使用name
。name
属性已不再受支持。如果您愿意,可以删除该代码。当链接引用 id 而不是 锚点名称 时,我从 JQuery 中得到了一个异常,因为
[name=link]
不存在。ID 也是锚点。我使用这段代码已经有一段时间了。最近,我注意到在移动 Safari 上出现了一个问题,即页面在动画结束时跳转到滚动元素。发生这种情况是因为我已将滚动设置为在锚点之前一段设定的距离发生,然后 IOS 似乎在调用 focus() 函数时自动滚动到该元素。为了解决这个问题,我添加了 {preventScroll: true} 选项,因此 focus({preventScroll: true})。
哦,是的,关于上面 Parimal JS 的内容——偏移量对来自外部网站的链接不起作用,也对网站内部从不同页面到不同页面(带有锚点)的链接不起作用!
如何解决这个问题?
我知道这是一篇旧帖子,不确定您是否会看到它,但如果我在“返回顶部”按钮上使用平滑滚动,是否有任何方法可以在滚动到顶部时向按钮添加一个类,并在到达顶部时删除该类。例如,当它超出我设置的偏移量时,我会添加“show”类,但我想知道是否可以在单击按钮时添加一个事件侦听器,并在到达顶部时删除该类。谢谢。
根据输入,用户似乎提供了有关在 Web 开发中实现平滑滚动的不同技术和工具的信息。他们提到了本地 CSS 功能(如 scroll-behavior),平滑滚动的本地 JavaScript 版本,并提到了 Dustan Kasten 提供的可用 polyfill。用户还强调了在实现平滑滚动时考虑可访问性的重要性,并建议阅读 Heather Migliorisi 的文章以获取代码解决方案。