🏫 Open API_JAVA
[26일차] scroll 시 발생되는 이벤트 핸들러
Dorothy_YANG
2022. 8. 26. 09:39
728x90
20220825(목)
- 목차
- scroll 할 때 발생되는 이벤트 핸들러
- currentSection1
< scroll 할 때 발생되는 이벤트 핸들러 >
- 이벤트 핸들러 {
1. yOffset
2. sectionYOffset
scrollProc();
} - 스크롤 할때마다.
1) yOffset 계산
2) sectionyOffset 계산
3) mode 설정
4) scrollProc() 호출. ➡ playAnimation()
< currentSection1 >
- 스크롤 할 때 우리가 적용해야하는 css값을 계산해서 animation을 적용하기
➡ 한 범위 내에서만 Animation 돌게 하기
//현재 섹션에서 적용해야할 CSS값을 계산하는 함수.
const calcValue = function(values)
{
let result;
const height = sectionSet[currentSection].height;
let rate;
let partStart; // 실제 start값
let partEnd; // 실제 end값
let partHeight; // 높이.
if (values.length == 2)
{
rate = sectionYOffset / height;
result = (rate * (values[1] - values[0])) + values[0];
}
// start, end값이 들어온 경우. [0, 1, {start: 0.1, end: 0.2}],
else if (values.length === 3)
{
partStart = values[2].start * height;
partEnd = values[2].end * height;
partHeight = partEnd - partStart;
if (sectionYOffset < partStart)
{
result = values[0];
}
else if (sectionYOffset > partEnd)
{
result = values[1];
}
else
{
rate = (sectionYOffset - partStart) / partHeight;
result = (rate * (values[1] - values[0])) + values[0]
}
}
return result;
}
// 처음부터 끝까지 스크롤 할 때마다 계속 애니메이션이 진행되는데
// 섹션별로 진행되는 애니메이션을 구별할 필요가 있다.
const playAnimation = function()
{
const values = sectionSet[currentSection].vals;
const objects = sectionSet[currentSection].objs;
const scrollRate = sectionYOffset / sectionSet[currentSection].height;
switch(currentSection)
{
// 0번 섹션의 애니메이션 처리
case 0 :
// 0.1 ~ 0.2
if ((scrollRate > 0.09) && (scrollRate < 0.21))
{
objects.messageA.style.opacity = calcValue(values.messageA_opacity_in);
}
// 0.25 ~ 0.3
else if ((scrollRate > 0.24) && (scrollRate < 0.31))
{
objects.messageA.style.opacity = calcValue(values.messageA_opacity_out);
}
break;
case 1 :
// 1번 섹션의 애니메이션 처리
break;
}
}
728x90