728x90
300x250
SMALL
Scrollspy란?
탐색 메뉴가 페이지를 스크롤할 때 사용자가 보고 있는 페이지의 현재 섹션을 강조 표시할 수 있는 웹 개발 기능을 말한다.
jQuery 예시
스크롤 하면 현재 페이지 섹션에 해당하는 메뉴 색상이 변경 된다.
$(document).ready(function() {
$(window).scroll(function() {
var currentSection = null;
$('section').each(function() {
var sectionTop = $(this).offset().top - 50;
if ($(window).scrollTop() >= sectionTop) {
currentSection = $(this).attr('id');
}
});
$('nav li').removeClass('active');
if (currentSection) {
$('nav li:has(a[href="#'+ currentSection +'"])').addClass('active');
}
});
});
문서를 스크롤 하면 현재 섹션을 담을 변수를 생성하고
each 메서드를 사용하여 각 section 영역의 top 위치를 확인한다.
이 때 사용한 offset() 함수는 선택한 요소의 문서 상단으로부터의 거리를 반환하는데, 이 값을 통해 스크롤이 어느 섹션에 위치 하는지를 판단 할 수 있고 스크롤 위치와 현재 섹션의 위치가 정확하게 맞지 않을 경우를 대비해 조금 아래에 있을 경우에도 해당 섹션을 인식할 수 있도록 -50
만약 윈도우 스크롤top이 섹션의 위치를 넘어 설 경우 해당 섹션의 id 값을 가져온다.
nav li에 active 클래스를 먼저 지우고
만약에 currentSection에 값이 있다면 href 속성 값이 해당 할 경우 active클래스를 붙인다.
javaScript 예시
window.addEventListener('scroll', () => {
const sections = document.querySelectorAll('section');
const navLinks = document.querySelectorAll('nav ul li a');
let current = '';
sections.forEach((section) => {
const sectionTop = section.offsetTop;
const sectionHeight = section.clientHeight;
if (pageYOffset >= sectionTop - sectionHeight / 3) {
current = section.getAttribute('id');
}
});
navLinks.forEach((navLink) => {
navLink.classList.remove('active');
if (navLink.getAttribute('href').includes(current)) {
navLink.classList.add('active');
}
});
});
728x90
반응형
LIST
'javaScript > JS Examples' 카테고리의 다른 글
[javaScript]스타일 속성 접근하기 인라인/내부/외부 스타일 (0) | 2023.02.10 |
---|---|
[javaScript] 아이폰일 경우에만 적용 스크립트 (0) | 2022.07.26 |
javaScript 간단하게 변수의 빈값 체크해 유효성 검사하기 (0) | 2022.05.28 |
element를 기준으로 마우스 좌표 값 구하기 javaScript (0) | 2022.05.26 |
뒤로가기 금지 스크립트 (0) | 2022.05.15 |
댓글