사이드 바를 하위 탐색으로 사용하고 사용자 정의 javascript를 첨부하여 사용자가 섹션을 아래로 스크롤하는 동안 탐색 링크를 강조 표시합니다. 내 기본 js 파일에이 자바 스크립트가 포함되어 있습니다. 사이드 바는 모든 페이지에 포함되어 있지 않습니다. 성능 측면에서이 사이드 바에 첨부 된 스크롤 이벤트가 사이드 바가 포함되지 않은 사이트에서 발생하거나이 사이트에서 무시되는 스크립트 일 경우 알고 싶습니다.타겟팅 요소가없는 경우에도 스크롤 이벤트가 발생합니까?
// waypoint for fixed sidebar
$('.tg-desktop__accordionWrapper').waypoint(function (direction) {
if (direction === 'down') {
$(this.element).addClass('tg-accordion__sidebar--fixed');
} else {
$(this.element).removeClass('tg-accordion__sidebar--fixed');
}
});
// cache the navigation links
var $navigationLinks = $('.tg-accordion__sidebarLink');
// cache (in reversed order) the sections
var $sections = $($(".tg-accordion__text").get().reverse());
// map each section id to their corresponding navigation link
var sectionIdTonavigationLink = {};
$sections.each(function() {
var id = $(this).attr('id');
sectionIdTonavigationLink[id] = $('.tg-accordion__sidebarLink[href=#' + id + ']');
});
// throttle function, enforces a minimum time interval
function throttle(fn, interval) {
var lastCall, timeoutId;
return function() {
var now = new Date().getTime();
if (lastCall && now < (lastCall + interval)) {
// if we are inside the interval we wait
clearTimeout(timeoutId);
timeoutId = setTimeout(function() {
lastCall = now;
fn.call();
}, interval - (now - lastCall));
} else {
// otherwise, we directly call the function
lastCall = now;
fn.call();
}
};
}
function highlightNavigation() {
// get the current vertical position of the scroll bar
var scrollPosition = $(window).scrollTop();
// iterate the sections
$sections.each(function() {
var currentSection = $(this);
// get the position of the section
var sectionTop = currentSection.offset().top;
// if the user has scrolled over the top of the section
if (scrollPosition >= sectionTop) {
// get the section id
var id = currentSection.attr('id');
// get the corresponding navigation link
var $navigationLink = sectionIdTonavigationLink[id];
// if the link is not active
if (!$navigationLink.hasClass('active')) {
// remove .active class from all the links
$navigationLinks.removeClass('active');
// add .active class to the current link
$navigationLink.addClass('active');
}
// we have found our section, so we return false to exit the each loop
return false;
}
});
}
$(window).scroll(throttle(highlightNavigation,100));
감사합니다. 내 하루를 만들어, 기능에 대한 길이 옵션에 대해 생각하지 않았어! 스크롤 또는 크기 조정 처리기가 가끔씩 만 사용하는 경우 :-) 메리 크리스마스 @ Roamer-1888이 항상 수행되어야한다고 생각합니다. – DoUtDes