我是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;之后为什么功能??这到底是做什么的?
答案 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事件。因此,匿名函数中的第二行将其重新打开。