inflearn logo
강의

Course

Instructor

Interactive Development Practice End [Capacity Enhancement]

[Practice] Replace fixed image to fit scroll 3

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

459

ctallhack2457

3 asked

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 인터랙티브-웹

Answer 1

0

ctallhack2457

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

요소 생성을 .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

coding11

안녕하세요.

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

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

 

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

0

402

2

레퍼런스 사이트

0

339

1

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

0

267

1

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

0

380

1

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

0

675

1

scrollTo 완성본

0

603

2

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

0

386

1

css 질문 드립니다

0

624

1

css 질문

0

284

1

pointBtn.addEventListner("click")

0

305

2

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

0

285

1

offsetTop, offsetHeight

0

785

2

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

0

320

1

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

0

256

1

질문입니다.

0

215

1

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

0

1657

1

wrap 안에 click 이벤트

0

225

1

greensock을 사용하려면

0

701

1

TweenMax 효과 리셋

0

527

1

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

0

193

1

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

0

371

1

화살표 회전 질문

0

263

1

질문이용~

0

218

1

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

1

213

1