Bootstrap 3和ScrollTop功能:#link冲突

时间:2014-06-20 11:42:52

标签: javascript jquery css jquery-selectors twitter-bootstrap-3

我使用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() {

2 个答案:

答案 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() {

这将选择以下链接:

  1. 其中包含#的所有a个标记。
  2. 没有href直接设置为#
  3. 不在#myCarousel