일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
- Riot Games
- JavaScript
- Agile 게임 개발
- HLSL
- Niagara
- Unreal
- IntersectionObserver
- unreal visual studio
- hlsl with unreal
- render target2d
- Compute Shader
- visual studio integration tool 상태
- texture render target
- Game Developement
- unreal compute shader #unreal niagara #unreal #compute shader #unreal niagara with compute shader
- Fluid simulation
- unreal niagara
- render target
- HTML
- carousel indicator
- page dot
- niagara.pdb 로드되지 않음
- jquery
- unreal c++ #unreal #unreal build #unreal
- unreal niagara with compute shader
- kanban
- CSS
- scroll-snap
- unreal compute shader
- League of Legend
- Today
- Total
Nephrite21
Intersection Observer API를 활용하여 carousel indicator(dot) 만들기 -1- 본문
Intersection Observer API를 활용하여 carousel indicator(dot) 만들기 -1-
Nephrite21 2023. 3. 29. 19:34Intersection Observer 홈페이지에 적용하기.
현재 블로그 상태이다.
현재 블로그는 scroll-snap을 이용하여 한 페이지(내용이 달라지는 부분마다 페이지로 구분)씩 스크롤 되게 되어있다. 여기서 스크롤을 내렸을 때 현재 스크롤의 위치가 어디인지 알려주고, 클릭 시 이동할 수 있는 Indicator를 우측에 제작할 예정이다.
이 과정에서 현재 index를 Intersection Observer를 통해 받아오고, 이를 활용해서 indicator의 색상변환/애니메이션 활성화 등을 할 수 있는 구조를 만들 계획이다.
observer를 통해 현재 인덱스 값을 받아오는 구조를 먼저 만들어 보도록 하겠다.
Intersection Observer 등록
가장먼저 할 일은 Intersection Observer를 만드는 일이다.
let option = { threshold: 1.0 }
var observer = new IntersectionObserver((entries, observer)=>{
//함수 구현 내용
}, option);
$(".scroll-area").each(function(){
observer.observe(this);
})
이렇게 함으로써 scroll-area class를 갖는 모든 요소들에 대해 특정 요소가 viewport에 완전히 드러났을 때, callback 함수를 실행 할 수 있게 된다.
Intersection Observer Entry를 이용하여 인덱스 값 얻기.
다음으로 해야 할 일은 callback이 발생했을 때, entry를 이용하여 현재 인덱스 값을 반환하는 과정이다. 이 과정에서 entries.target을 활용하면, 해당 element를 직접 받을 수 있다.
var observer = new IntersectionObserver((entries, observer)=>{
entries.forEach(entry=>{
//활성화 되지 않은 entry가 들어오게 되는 상황의 예외처리
if(!entry.isIntersecting){
return;
}
currentPageIndex = $(entry.target).index();
console.log(currentPageIndex);
})
}, option);
$(".scroll-area").each(function(){
observer.observe(this);
})
※ 필자는 scroll-snap을 통해 반드시 하나의 element만 entries에 들어온다는 것이 확실한 상황이다. 따라서 element를 여러개 관측되게 하기 위해서는 다른 방식을 사용해야한다.
3개의 scroll-area class 의 div 중 마지막 하나의 div는 높이가 150vh로 설정되어있어서 threshold가 1.0이면 절대 값을 받을 수 없게 되었다.
이 문제를 해결하기 위해서 scroll-snap의 mandatory 속성이 다음 엘리먼트로 스크롤을 시작하는 정도인 40% 정도를 기준으로 삼아서 threshold를 0.4로 변경해줬다.
다음시간에는 이 인덱스 값을 이용해서 현재 스크롤 위치를 알려주는 인디케이터를 만들어보도록 하겠다.
'Html-Css-Js 홈페이지 만들기' 카테고리의 다른 글
::before과 ::after 사용법 (0) | 2023.03.30 |
---|---|
Intersection Observer API 사용하기 (0) | 2023.03.29 |