• 카테고리

    질문 & 답변
  • 세부 분야

    프론트엔드

  • 해결 여부

    미해결

질문있습니다 ㅠㅠ

21.10.14 20:25 작성 조회수 179

0

function calcValues(values, currentYOffset) {
let rv;
// 현재 씬(스크롤섹션)에서 스크롤된 범위를 비율로 구하기
const scrollHeight = sceneInfo[currentScene].scrollHeight;
const scrollRatio = currentYOffset / scrollHeight;
if (values.length === 3) {
// start ~ end 사이에 애니메이션 실행
const partScrollStart = values[2].start * scrollHeight;
const partScrollEnd = values[2].end * scrollHeight;
const partScrollHeight = partScrollEnd - partScrollStart;
if (currentYOffset >= partScrollStart && currentYOffset <= partScrollEnd) {
rv = (currentYOffset - partScrollStart) / partScrollHeight * (values[1] - values[0]) + values[0];
} else if (currentYOffset < partScrollStart) {
rv = values[0];
} else if (currentYOffset > partScrollEnd) {
rv = values[1];
}
} else {
rv = scrollRatio * (values[1] - values[0]) + values[0];
}
return rv;
}
해석
  1. scrollHeight :  지금 현재 씬의 높이
  2. 지금 현재씬 높이 /현재 활성화된 씬의 비율
  3. 만약 values 값이 3개라면 ex) example : [0, 1, {start : 0.1, end : 0.2}]
  4. partScroll start,end(비율..) 는 scrollHeight(지금 현재 씬의 높이)를 곱함
  5. partScrollHeight :  start와 end의 중간 값
  6. 만약 현재 스크롤 위치가 스타트 위치보다 위에 있고 스크롤 위치가 end보다 작은곳에 있다면?
  7. 현재 스크롤 위치 빼기 시작 위치 / (sceneInfo[0~3]의 높이) * (끝값 - 시작값) + 시작값
  8. 사이 값이 아닐때 (partScrollStart값보다 작을때)=> 시작값
  9. 사이 값이 아닐대(partScrollend 값보다 클때) => 끝값
  10. value값이 3이 아니라면 ..? 이해 못함

 

정리하면서 공부하고 있는데.. value 값이 3이 아닌건 

videoImageCount: 960,
                imageSequence: [0959],

이부분도 3이 아닌데.. 그러면 videoImageCount일때는 values[1]의 값은 무엇인가요??

 

그리고 혹시 제가 설명한부분이 틀린부분있으면 고쳐주실수 있으실까요?

 

아 또 여쭈어볼게 있는데 

if (delayedYOffset < prevScrollHeight + sceneInfo[currentScene].scrollHeight) {
            document.body.classList.remove('scroll-effect-end');

       }

scroll-effect-end가 바디 클래스 리스트에 붙는다고 하는데 아무리 찾아봐도 안붙는거 가아서요 이부분이 이해가 안가네요 ㅠㅠ 도와주세요 

답변 1

답변을 작성해보세요.

0

전반적으로 잘 이해하신 것 같은데, 마지막에 10번 values값이 3이 아닌 것을 찾는게 아니라, values의 원소 개수인 length의 값(values.length)을 체크하는 것이랍니다. 세번째 값이 있느냐 없느냐에 따라 분기를 한 것인데요, 즉 [0, 959]는 values.length가 2이므로, 아래 rv = scrollRatio * (values[1] - values[0]) + values[0]; 이 부분이 실행됩니다. 3번째 원소가 없다는 것은, 그냥 해당 씬의 영역 전체에서 값이 처음부터 끝까지 변하는 것이지요.

scroll-effect-end 클래스가 안붙는 것은 해당 부분 스크립트가 빠져서 그런 것 같은데요, 강의에서 혹시 놓치셨다면 완성 소스에서 Ctrl+F로 scroll-effect-end 부분을 찾아보시면 될 것 같습니다^^