이 화면에서 JS로 만든 기능은 총 3가지 (배너 슬라이드, 네비게이션 메뉴 hover, 드롭다운 박스)
< 배너 슬라이드 >
let heroL = document.querySelector('#heroLeft') let heroR = document.querySelector('#heroRight') console.log(heroL, heroR) //배너에 배치되어 있는 버튼을 가져온다. let heroS = document.querySelectorAll('.hero_slider') //움직일 배너 부분을 가져온다. let heroCount = 0; //기능 작동에 필요한 변수를 초기화 한다, 지역변수로 할당하면 안된다. (전역에서 변해야 하는 값이므로) heroL.addEventListener('click', heroLeft) heroR.addEventListener('click', heroRight) //가져온 버튼에 이벤트를 할당한다. 클릭하면 작성한 기능이 실행된다. function heroLeft(){ heroCount--; //왼쪽 버튼을 누르면 1씩 감소된다. //변수의 값이 음수가 되는 경우 배너의 인덱스 마지막 부분으로 이동할 수 있도록 한다. //배열의 길이는 1부터 시작하지만 인덱스 번호는 0부터 시작하므로 -1을 해주어야 실제 길이가 맞다. if(heroCount<0){ heroCount = heroS.length-1 } heroL.style.backgroundColor = "#fda417" heroL.style.color = "white" heroR.style.backgroundColor = "white" heroR.style.color = "#07092f" //누르면 버튼의 색이 교차로 바뀌는 속성을 지정해주었다. heroShow() //실제 배너가 움직이는 기능을 포함시켜주어야 화면이 움직인다. } function heroRight(){ heroCount++; //오른쪽 버튼을 누르면 1씩 증가한다. //변수의 값이 배너의 인덱스 수 보다 많아지게 되면 다시 초기값(0)으로 돌린다. if(heroCount>=heroS.length){ heroCount = 0 } heroR.style.backgroundColor = "#fda417" heroR.style.color = "white" heroL.style.backgroundColor = "white" heroL.style.color = "#07092f" heroShow() } //실제 배너가 움직이는 효과를 내어 줄 기능이다. function heroShow(){ console.log('배너') heroS.forEach(function(array){ array.style.transform = `translateX(-${heroCount*100}%)` }) } |
<네비게이션 메뉴 마우스 over/out 기능 >
let navHover = document.querySelectorAll('#nav_ul > li > a') //네비게이션 메뉴를 가져오기, CSS 선택자로 작성해도 이상없다. navHover.forEach(function(array){ array.addEventListener("mouseover", navColor1) array.addEventListener("mouseout", navColor2) //이벤트는 같은 항목에 여러번 할당할 수 있다. }) //각 메뉴들에게 over와 out 이벤트를 지정하고 기능을 연결하기 function navColor1(){ console.log('오버') this.style.color = "#fda417" // this는 해당 이벤트가 발생한 요소를 가져오게 되는데, 그렇게 가져온 요소의 속성을 변경할 수 있다. } function navColor2(){ console.log('아웃') this.style.color = "white" } |
<드롭다운 박스>
let testimonial = document.querySelector('#nav_test') let testBox = document.querySelector('#nav_test_box') let testCount = 0; //드롭다운 박스를 클릭을 할 때마다 나타났다 사라지게 만드는 기능이다 //필요한 요소를 HTML에서 가져오고 전역변수로 필요한 카운트를 선언 및 초기화 해둔다. testimonial.addEventListener('click', navTestbox) //클릭 이벤트를 두번 주게되면 나타났다, 사라졌다를 순차적으로 반복하기 때문에 이번 기능에서는 그렇게 하면 안된다. function navTestbox(){ testCount++; //기본적으로 클릭 할 때마다 변수의 값이 1씩 증가하도록 한다. //변수의 값을 2로 나누었을 때의 나머지가 0인 경우는 짝수라는 뜻이므로, 짝수일 때 드롭박스가 보이지 않게 한다. //반대로 나누었을 때 나머지가 있다면 홀수라는 뜻이므로, 홀수일 때 드롭박스가 나타나게 만든다. if(testCount%2==0){ testBox.style.opacity = "0" testBox.style.top = "50px" } else{ testBox.style.opacity = "1" testBox.style.top = "25px" //투명도와 위치를 조절하여 나타나게 만든다. } } |
이 화면에서 쓰인 JS기능은 탭의 색상을 바꾸는 한가지
하단의 슬라이드는 CSS애니메이션 효과를 사용해 자동으로 넘어가게끔 만들었으므로 오랜만에 기록해보겠다.
let proTab = document.querySelectorAll('.pro_ul > li > a') //탭의 버튼들을 가져와준다. proTab.forEach(function(array){ array.addEventListener('click', projectTap) }) //각 탭에 이벤트를 할당한다. function projectTap(){ proReset() //색상 초기화 기능을 만들어 넣었지만 그냥 해당 기능의 구문을 여기에 작성해도 정상적으로 작동한다. //아래에서 색상을 바꾼 탭들이 다음으로 넘어갈 때마다 원래 색으로 돌아오게 하는 기능이다. //위에서부터 순차적으로 기능이 실행되기 때문에 초기화를 하고 그 이후 if문에 맞는 탭의 색상이 변하게 된다. let proID = this.id.charAt(this.id.length-1) //클릭한 탭의 속성에서 ID값의 맨 끝자리를 가져와 배열의 숫자와 비교해 같을 경우 색상을 변경하도록 만들었다. //탭의 아이디 뒤에는 0부터 5까지의 숫자를 입력해두었기 때문에 비교가 가능하다. for(let i=0; i<proTab.length; i++){ //1씩 증가하는 i의 값이 가져온 ID의 값과 동일하면 색상이 바뀐다. if(proID == i){ proTab[i].style.backgroundColor = "#fda417" } } } //다음 탭으로 넘어가면 원래의 색상으로 돌아오는 기능 function proReset(){ proTab.forEach(function(array){ array.style.backgroundColor = "white" }) } |
See the Pen Untitled by IT배움터 (@gfifvcbf-the-typescripter) on CodePen.
.pro_slider{ width: 100%; display: inline-block; animation: proSlider 4.5s ease-in-out infinite; //keyframes로 만든 애니메이션을 지정하기 //총 과정을 4.5초 동안 진행되게 만들고 애니메이션의 속도를 지정한 후 반복여부를 결정하면 설정은 끝 } @keyframes proSlider{ 0% { transform: translateX(0%); //제자리인 상태 } 40% { transform: translateX(-100%); //-100%만큼 이동한 상태 } 100%{ transform: translateX(-100%); //그 상태로 일시정지 } } |
'아이티에듀넷' 카테고리의 다른 글
2024-08-30 :: 028 Java Script 활용 평가 (0) | 2024.08.30 |
---|---|
2024-08-29 :: 027 Java Script 활용 ⑤ (2) | 2024.08.29 |
2024-08-27 :: 025 HTML / CSS / JS 참고용 포스트 (0) | 2024.08.27 |
2024-08-26 :: 024 Java Script 활용 ③ (0) | 2024.08.26 |
2024-08-23 :: 023 Java Script 활용 ② (0) | 2024.08.23 |