我使用BootStrap 3构建单页网站。要移动到页面的不同部分,我在http://css-tricks.com/snippets/jquery/smooth-scrolling/找到平滑滚动功能,它可以正常工作。
$(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;
}
}
});
});
平滑滚动检测以#
<a href="#zone">Scroll to Section Zone</a>
但是以#开头的链接也用于Bootstrap Carousel中data-target="#myCarousel"
因此,在幻灯片中移动到上一张/下一张幻灯片的按钮表现得很糟糕。
我几乎不了解Javascript,但我意识到代码的第二行是关于要避免的链接:所以我把“#myCarousel”放在那个部分。 您可以在下面找到编辑过的第二行:
$('a[href*=#]:not([href=#],"#myCarousel")').click(function() {
我的解决方案(非常令人惊讶!)有效......几乎可以工作! 还有一个问题:滚动不再平滑 单击按钮,页面将跳转到目标链接。
任何想法为什么不再顺利?
找到解决方案
感谢所有答案。
在发布此请求之前,我进行了搜索jquery api
我找到了一个解决方案:现在第二行读取了$('a[href*=#]').not("[href=#], [href=#myCarousel]").click(function() {
答案 0 :(得分:1)
您销毁了javascript函数,因为您的:not
选择器写错了。因此,平滑滚动不再起作用。试着这样做:
$('a[href*=#]:not(#myCarousel)').click(function() {
详细了解:not CSS selector
here
答案 1 :(得分:0)
这里的问题是你的选择器工作不正常。
如果打开控制台窗口并尝试编写:
$('a[href*=#]:not([href=#],"#myCarousel")')
您将看到结果是错误,因此,smoothscrolling功能无法正常工作,并且直接显示链接的默认行为正在进行中。
Read more about the jQuery Sizzle engine's .not() selector here.
尝试:
$('a[href*=#]').not('[href=#]','#myCarousel').click(function() {
这将选择以下链接:
a
个标记。href
直接设置为#
#myCarousel