inflearn logo
강의

강의

N
챌린지

챌린지

멘토링

멘토링

N
클립

클립

로드맵

로드맵

지식공유

인터랙티브 개발 실무 끝장내기 [역량 강화편]

[실습] 스크롤에 맞춰 fixed된 이미지 교체 3

페이징.페이지고정2 질문드립니다.

461

우치하마다라

작성한 질문수 3

0

 안녕하세요 선생님

강의 리소스에는 li가 html에 작성되어있지만

저는 자바스크립트를 이용하여 section 갯수에 맞춰서 li도

그 갯수에 맞춰서 생성해주고 싶어서 반복문 코드를 짜봤습니다.

ex) section 갯수가 8개면 li 갯수도 8개로 자동생성

생성은 되었습니다. 그러나 아직 li의 인덱스를 받아오는 코드를 작성하진 않았어요

스크롤을 하였을 시 pageNum 의 i 값이

pageChangeFunc의 함수안에서 remove 혹은 add 가 작동되지 않습니다.

(오류가 스크롤 했을 시 뜹니다.)

<--- F12에서는 이렇게 뜹니다. --->

Uncaught TypeError: Cannot read properties of undefined (reading 'classList')

at pageChangeFunc (4.html:120:33)

at 4.html:114:17

 

저는 section 갯수에 맞춰서 li갯수를 생성하려고 appendChild를 사용하였습니다.

저의 부족한 지식으로 유추해본 생각이지만 li를 생성하고 난 뒤여서 스크롤이벤트가 안먹혀서 그런건지...

아니면 classList 가 작동이 안될까? 라는 생각이 드는데 잘 모르겠네요...

답을 원하지 않습니다만 힌트라도 주시면 감사하겠습니다.

<--- 제가 작성한 코드는 이렇습니다. --->

var section = document.getElementsByTagName('section'); var pointWrap = document.querySelector('.pointWrap'); var pointBtn = document.querySelectorAll('.pointWrap li'); var pageNum = 0; var totalNum = section.length; for(var s = 0; s < totalNum; s++){ var newli = document.createElement('li') pointWrap.appendChild(newli); } window.addEventListener('scroll', function(event){ var scroll = this.scrollY; for(var i = 0; i < totalNum; i++){ // if(scroll > section[i].offsetTop && // scroll < section[i].offsetTop + section[i].offsetHeight){ if(scroll > section[i].offsetTop - window.outerHeight/3 && scroll < section[i].offsetTop - window.outerHeight/3 + section[i].offsetHeight){ pageNum = i; break; } } pageChangeFunc() }); function pageChangeFunc(){ for(var z = 0; z < totalNum; z++){ section[z].classList.remove("active"); pointBtn[z].classList.remove("active"); } section[pageNum].classList.add("active"); pointBtn[pageNum].classList.add("active"); }

javascript 인터랙티브-웹

답변 1

0

우치하마다라

순서에 문제가 있는 것 같아서

요소 생성을 .pointWrap li 이전에 해줬더니 정상적으로 remove , add가 먹히네요

앞으로 좀더 생각해보고 질문드리겠습니다...;;

 

for(var s = 0; s < totalNum; s++){
     var liElement = document.createElement('li')
     pointWrap.append(liElement);
   }

var pointBtn = document.querySelectorAll('.pointWrap li');

0

코딩일레븐

안녕하세요.

답변드리러 왔는데 해결을 하셨군요? ^^

이렇게 연구하면서 느시는거죠.

 

모바일 스와이프 구현 마지막 숙제

0

405

2

레퍼런스 사이트

0

343

1

스크롤위치에 따른 페이지 변화에서

0

267

1

배열을 이용한 bg컬러 변경 강의에서 tagname body에 [0]이 왜 붙나요?

0

384

1

스크롤 위치에 따른 페이지 변화 - scroll 이벤트 에 대한 질문

0

678

1

scrollTo 완성본

0

606

2

모바일 3D 입체 카드 제작 아이폰에서 에러

0

388

1

css 질문 드립니다

0

624

1

css 질문

0

285

1

pointBtn.addEventListner("click")

0

306

2

if문의 첫번째 조건 질문 있습니다~

0

285

1

offsetTop, offsetHeight

0

787

2

기존의 축 회전값에 더해서 rotate

0

320

1

모바일 드래그 강의 질문드립니다!

0

257

1

질문입니다.

0

216

1

GSAP(트윈맥스) 라이센스 관련 질문 드립니다.

0

1661

1

wrap 안에 click 이벤트

0

226

1

greensock을 사용하려면

0

701

1

TweenMax 효과 리셋

0

529

1

max 이상으로 입력했을 때 질문입니다.

0

196

1

dom에서 직접i nput의 value 값을 갖고 나오는 것에 대해

0

376

1

화살표 회전 질문

0

265

1

질문이용~

0

221

1

파일명 한글시 live Server 작동안함

1

216

1