btnLink[1].addEventListener("click", function(e){//a태그로 이동하는데 특정 영역으로 이동시키는걸 막기 위해서 하나를 선언
e.preventDefault();
window.scrollTo({top:1000, behavior:"smooth"});//행동을 부드럽게 한다는 의미
})
btnLink[2].addEventListener("click", function(e){
e.preventDefault();
window.scrollTo({top:2000, behavior:"smooth"});
})
btnLink[3].addEventListener("click", function(e){
e.preventDefault();
window.scrollTo({top:3000, behavior:"smooth"});
})
화면을 부드럽게 하기위한 자바 스크립트 (scrollTo를 사용)
/*배경색상 변경 스크립트*/
letsec=document.querySelectorAll(".sec");
window.addEventListener("scroll", function(){
letscroll=window.scrollY;
console.log(scroll) //scrollY를 통해서 위치 값을 콘솔에 불러왔다.
if((scroll>0) && (scroll<=1000)){//식으로 0보다 크거나 1000이랑 같거나 작다면 실행 둘다 true가 나와야 실행되도록 하고 싶기 때문에 (식이 2개라는 말) &&를 사용한다.
sec[0].style.background="tomato"
}elseif((scroll>1000)&&(scroll<=2000)){
sec[1].style.background="gold"
}elseif((scroll>2000)&&(scroll<=3000)){
sec[2].style.background="skyblue"
}elseif((scroll>3000)&&(scroll<=4000)){
sec[3].style.background="yellowgreen"
}
})
스크롤의 값이 지정한 식에 따라 해당 스크롤의 높이만큼 변하면서 배경색이 바뀌도록 지정하였다. 위는 0보다 크거나 1000이랑 같거나 작다면 실행하는 식으로 둘다 맞는 식이어야 실행이 된다. 여기서는 각각 위치에 맞춰서 색을 넣어서 높이 값에 맞게 색이 변하도록 설정해 주었다. 여기서는 유지보수가 어렵기 때문에 이를 줄이기 위해서 식을 넣어준다.
else가 들어가도 되지만 if만 써도 무방하다. 각각 섹션의 높이는 같기 때문에 식을 넣어줄 수 있는데, 숫자가 들어가는 부분에 일정식을 넣어줄 수도 있다. 여기서는 1000씩 값이 늘어났기 때문에 1씩 숫자가 증가하여 곱해진것을 볼 수 있다.
for 구문을 사용해 위의 수를 자동으로 계산해줄 변수를 선언해준다. 기본값을 0으로 두고 각 인덱스 번호에 맞게 하나씩 늘어나도록 하기 위해서 i라는 변수를 선언해준다. 그리고 처음에는 값이 0으로 시작하기 때문에 첫 인덱스 0번부터 시
gap: 40px; /*display flex grid 둘다 넣을수 있는 속성으로 사이 띄움을 의미한다.*/
}
.graph{
width: calc(100%/2 - 60px);
border: 2pxdottedcyan;
}
.gr-txt{
display: flex;
justify-content: space-between;
font-size: 14px;
}
.gr-bar{
position: relative;
margin-top: 20px;
}
.bar-bg{
display: block;
height: 10px;
border-radius: 50px;
background: #333;
}
.bar{
display: block;
height: 10px;
border-radius: 50px;
background: #fff;
position: absolute;
left: 0; top: 5px;
width: 0%;
}
</style>
스타일
내가 지정하는 퍼센트에 따라 바가 올라오도록 하는데 해당 섹션에 도달했을때 실행이 되어 올라오도록 자바스크립트를 사용할 것이다. (특정영역에서 이벤트가 발생)
//그래프가 커지는 스크립트
letbar=document.querySelectorAll(".bar");
letsec=document.querySelector("#section2");//섹션2의 객체만 저장됨 하지만 좌표값도 필요하다.
letsecTop=sec.offsetTop; //다른 지정된것이 없기 떄문에 상대좌표값으로 잡아준다. sec의 top좌표값을 확인해서 변수 안에 저장, offsetTop은 상대좌표값으로 부모요소에 position이 있으면 좌표값이 변경될 수 있다.
// console.log(secTop)
window.addEventListener("scroll", function(){
letscroll=window.scrollY;
if(scroll>=secTop){
bar[0].style.width="85%";
bar[1].style.width="90%";
bar[2].style.width="95%";
bar[3].style.width="70%";
}
하지만 이렇게 하게 되면 영역에 왓을때 딱 한번만 실행되게 되고 다른 섹션에 갓다가 다시 와도 실행되지 않고 그대로 있다. 만약 해당 섹션에 갈때마다 하고 싶다면 연산자를 사용해 해당영역의 시작점 식과 끝나는 지점의 식이 함께 맞을때 실행되어야 하기 때문에 &&로 연산자를 넣어주고 if, else 구문을 활용해 해당 위치에서는 원하는 값의 바가 나타나고 아니라면(else) 0%로 바뀌어서 섹션이 변할때 마다 바가 올라오게 설정된다.