UI 동작을 위해 생각해 봐야 할 것
- <a> 링크의 기본 동작을 막아야함
- 화면을 스무스하게 이동 시켜야함
- 이동을 원하는 각 섹션의 위치를 담아 둬야함
HTML 구조
더보기
<ul class="nav-bar">
<li><a href='#view01'>1</a></li>
<li><a href='#view02'>2</a></li>
<li><a href='#view03'>3</a></li>
<li><a href='#view04'>4</a></li>
</ul>
<div id="view01" class="screen sc-01"></div>
<div id="view02" class="screen sc-02"></div>
<div id="view03" class="screen sc-03"></div>
<div id="view04" class="screen sc-04"></div>
[STEP 01] <a> 링크 기본 동작 막기
자바스크립트에서 기본 동작을 막을 수 있는 'e.preventDefault' 매소드를 사용
$('.nav-bar li a').on('click', function(e){
e.preventDefault(); // 링크 클릭의 기본 동작을 중단
})
선택자를 $('. nav-bar li')가 아닌 $('.nav-bar li a')로 직접적으로 한 이유는 hash 함수를 사용 하기 위해서임
[STEP 02] hash() 함수로 해당 값 담아두기
$('.nav-bar li a').on('click', function(e){
e.preventDefault(); // 링크 클릭의 기본 동작을 중단
var hash = this.hash; // a링크 href 값 반환
console.log(hash);
})
출력을 해보면 nav-bar 1번은 #view01, 2번은 #view02 값이 반환됨
[STEP 03] 각 섹션의 떨어진 거리 구하기
offset(). top를 사용해서 각각의 섹션의 거리를 알아낼 수 있음
전에 담아둔 변수 hash를 사용하여 거리를 계산
$('.nav-bar li a').on('click', function(e){
e.preventDefault(); // 링크 클릭의 기본 동작을 중단
var hash = this.hash; // a링크 href 값 반환
var viewNum = $(hash).offset().top; // 섹션 거리 저장 변수
})
위와 같이 코드를 작성하면 <nav>의 요소를 클릭할 때마다 해당 섹션의 거리가 나오는 걸 알 수 있음
- 첫 번째를 클릭하면 viewNum은 $('#view01').offset().top;이 할당됨
- 두 번째를 클릭하면viewNum은 $('#view02').offset().top;이 할당됨
- 세 번째를 클릭하면 viewNum은 $('#view03').offset().top;이 할당됨
- 네 번째를 클릭하면viewNum은 $('#view04'). offset(). top;이 할당됨
[STEP 04] 스크롤 애니메이션 추가 (최종 구현)
$('.nav-bar li a').on('click', function(e){
e.preventDefault(); // 링크 클릭의 기본 동작을 중단
var hash = this.hash; // a링크 href 값 반환
var viewNum = $(hash).offset().top; // 섹션 거리 저장 변수
$('html').animate({
scrollTop: viewNum
}, 1000)
})
이처럼 코드를 작성하면 의도한 대로 잘 동작함
'Web > JavaScript' 카테고리의 다른 글
| 자동 스크롤 감지 기능 : IntersectionObserver 활용 방법 (0) | 2023.09.23 |
|---|---|
| [Swiper.js] 다양한 멋진 캐러셀을 구현하는 JavaScript 라이브러리 (0) | 2023.09.23 |
| ES6 모듈 문법 :: export default와 export {} 차이 이해하기 (0) | 2023.09.20 |
| [JavaScript] 이벤트 버블링(이벤트 중복 발생) 해결 방법 (0) | 2023.09.15 |