了解Jquery代码以突出显示导航栏项

时间:2014-10-29 20:43:35

标签: javascript jquery twitter-bootstrap

我是Jquery的新手,想要更好地理解。

我正在使用bootstrap scroll-spy来改变我的导航高亮,因为我一直在滚动页面或当我点击特定的链接时,现在bootstrap中的默认插件是非常可定制的,所以我搜索了stackoverflow并找到了一个伟大的代码和平,完美的工作。虽然目前的要求是这样的,我将不得不进一步修改这个代码,以满足我的需要。但我无法理解开发人员给出的完整代码。

原始JSfiddle Jsfiddle

下面是代码。

enter code here  $(document).ready(function () {
$(document).on("scroll", onScroll);

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

    $('a').each(function () {
        $(this).removeClass('active');
    })
    $(this).addClass('active');

    var target = this.hash,
       menu = target;
    $target = $(target);
    $('html, body').stop().animate({
        'scrollTop': $target.offset().top+2
    }, 500, 'swing', function () {
        window.location.hash = target;
        $(document).on("scroll", onScroll);
    });
  });
});

function onScroll(event){
var scrollPos = $(document).scrollTop();
$('#menu-center a').each(function () {
    var currLink = $(this);
    var refElement = $(currLink.attr("href"));
    if (refElement.position().top <= scrollPos && refElement.position().top + refElement.height() > scrollPos) {
        $('#menu-center ul li a').removeClass("active");
        currLink.addClass("active");
    }
    else{
        currLink.removeClass("active");
    }
  });
}

现在我浏览了这段代码,我看到使用了很多Jquery函数,如on()和off()以及location.hash。所以我去检查了Jquery的文档并学习了我不熟悉的功能,大部分都是有意义的,但有些部分仍然没有。

    $('html, body').stop().animate({
        'scrollTop': $target.offset().top+2
    }, 500, 'swing', function () {
        window.location.hash = target;
        $(document).on("scroll", onScroll);
    });

我不知道在上面的代码中发生了什么。我理解stop()函数的用法。在&#39; swing&#39;之后为什么功能??这到底是做什么的?

2 个答案:

答案 0 :(得分:0)

.on()添加了一个eventHandler(不太常见但是标准的一部分)和 .off()将其删除

window.location.hash更改哈希后的部分:
window.location.hash = "example";生成“www.blah.com/ #example

$('html, body').stop().animate({
    'scrollTop': $target.offset().top+2
}, 500, 'swing', function () {

这里500是动画的持续时间,'swing'是动画的类型,而函数是动画完成时将被调用的回调

答案 1 :(得分:0)

animate方法中的最后一个参数是回调;一旦动画完成,就会调用匿名函数。

匿名函数的第一行

window.location.hash = target;

更改网址的哈希部分,例如&#39;#&#39;之后的部分。这样可以保留后退按钮的功能。

至于第二行

$(document).on("scroll", onScroll);

注意上面的十几行:

$(document).off("scroll");

在调用animate之前关闭scroll事件。因此,匿名函数中的第二行将其重新打开。