我需要修复我的代码。如果我在菜单中单击多个html href链接,我的脚本将滚动到每个单击的链接一个接一个单击链接。我只需要滚动到第一个单击的链接,滚动功能期间另一个单击的链接将被忽略。
jQuery(window).bind("load", function () {
var hash = window.location.hash;
hash = hash.replace("#", "");
var elem = jQuery(".pb-line-css-group-" + hash);
menu_scroll_to(elem);
});
jQuery(document).ready(function () {
jQuery(".menu-item A").click(function () {
var hash = jQuery(this).attr('href');
hash = hash.replace("#", "");
hash = hash.replace("/", "");
var elem = jQuery(".pb-line-css-group-" + hash);
menu_scroll_to(elem);
});
});
function menu_scroll_to(elem) {
if (elem) {
jQuery('html, body').animate({
scrollTop: elem.offset().top - 70
}, 2000, "easeOutQuint");
}
}
答案 0 :(得分:1)
你可以设置一个去抖功能,这样你只需要在一段时间内多次点击menu_scroll_to()。
以下是应该有效的去抖功能的链接。
将该函数添加到JS并替换以下行:
menu_scroll_to(elem);
with:
debounce(function() {
menu_scroll_to(elem);
}, 250);
其中250是以毫秒为单位的时间。
最终代码一起将是这样的:
jQuery(window).bind("load", function () {
var hash = window.location.hash;
hash = hash.replace("#", "");
var elem = jQuery(".pb-line-css-group-" + hash);
menu_scroll_to(elem);
});
jQuery(document).ready(function () {
jQuery(".menu-item A").click(function () {
var hash = jQuery(this).attr('href');
hash = hash.replace("#", "");
hash = hash.replace("/", "");
var elem = jQuery(".pb-line-css-group-" + hash);
debounce(function () {
menu_scroll_to(elem);
}, 250);
});
});
function menu_scroll_to(elem) {
if (elem) {
jQuery('html, body').animate({
scrollTop: elem.offset().top - 70
}, 2000, "easeOutQuint");
}
};
function debounce(func, wait, immediate) {
var timeout;
return function() {
var context = this, args = arguments;
var later = function() {
timeout = null;
if (!immediate) func.apply(context, args);
};
var callNow = immediate && !timeout;
clearTimeout(timeout);
timeout = setTimeout(later, wait);
if (callNow) func.apply(context, args);
};
};