javascript - 从 jquery 中的 scrollTo 动画中排除特定#

标签 javascript jquery css scrollto hashtag

下面的 jquery 代码让我滚动到我页面内的链接,如#link。但现在我有三个特殊链接,#tab-1 #tab-2 #tab-3 不应包含在此 scrollto 脚本中,什么也不做。我不知道如何从这个脚本中排除特定的#。

感谢您的帮助!

$('a[href^="#"]').on('click',function (e) {
    e.preventDefault();

    var target = this.hash;
    var $target = $(target);

    $('html, body').stop().animate({
        'scrollTop': $target.offset().top-80 //offset -80 for navigation height
    }, 900, 'swing');
});

最佳答案

我会将您的代码更改为:

var special = ['#tab-1', '#tab-2', '#tab-3'];

$('a[href^="#"]').on('click',function (e) {
    e.preventDefault();

    var target = this.hash;

    if( $.inArray( target, special ) > -1 ) return;

    var $target = $(target);

    $('html, body').stop().animate({
        'scrollTop': $target.offset().top-80
    }, 900, 'swing');
});

这定义了哈希不能相等的“特殊”值数组。 $.inArray()用于检查当前哈希值是否与 special 数组中的值之一匹配。如果是,则返回并且不执行下面的代码。

Bootstrap 中轮播的另一个例子:

var special = ['#carousel-example-generic'];
$('a[href^="#"]').on('click',function (e) {
    e.preventDefault();

    var target = this.hash;
    if( $.inArray( target, special ) > -1 ) return;
    var $target = $(target);

    $('html, body').stop().animate({
        'scrollTop': $target.offset().top 
    }, 500, function () {
        window.location.hash = target;
    });
});   

关于javascript - 从 jquery 中的 scrollTo 动画中排除特定#,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28974106/

相关文章:

javascript - 如何像这样创建自定义 jQuery

html - 当 flexbox 元素以列模式包装时,容器不会增加其宽度

css - 如何在显示表格单元格 div 内滚动 100% 宽度、100% 高度的大表格而不是整个页面

javascript - NodeJS 中的 Readline 正在绘制不需要的线条

javascript - 带有嵌套 Angular Promise 的 Jasmine 2.0 测试

javascript - Nokogiri - 查找 javascript 数组内的值

jquery函数需要先取消其他函数

jquery - 在 FullCalendar 上启用时区

javascript - div 之间的网格高度问题?

javascript - Html.Replace 在 Node 中不起作用