카테고리 없음
[JavaScript] 타겟 위치로 이동시키기
임고미
2022. 6. 29. 13:51
728x90
300x250
특정 element위치로 이동시킬경우 element의 위치를 구해서 scrollTo를 사용해주고 있었다.
그러나 더 쉬운 방법을 찾아 공유해보고자 한다..
키워드는
scrollIntoView
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8" />
<meta http-equiv="X-UA-Compatible" content="IE=edge" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<title>Document</title>
<style>
.btn-box {
position: sticky;
top: 0;
}
.box div {
width: 400px;
height: 400px;
}
.box div:nth-child(1) {
background: red;
}
.box div:nth-child(2) {
background: blue;
}
.box div:nth-child(3) {
background: pink;
}
.box div:nth-child(4) {
background: violet;
}
</style>
</head>
<body>
<div class="btn-box">
<button class="itembtn">1</button>
<button class="itembtn">2</button>
<button class="itembtn">3</button>
<button class="itembtn">4</button>
</div>
<div class="box">
<div>item1</div>
<div>item2</div>
<div>item3</div>
<div>item4</div>
</div>
<script>
document.querySelectorAll(".itembtn").forEach((btn, index) => {
btn.addEventListener("click", function () {
document
.querySelector(`.box div:nth-child(${index + 1})`)
.scrollIntoView({ behavior: "smooth" });
});
});
</script>
</body>
</html>
해당 엘리먼드 위치로 바로 이동한다,.. 위의 테스트 코드는
버튼을 클릭하면 해당 아이템 시작점으로 스크롤해준다.
그런데 만약,, 맨위에 찰삭 붙게하고 싶은게 아니라 위에 여백을 남기고 싶은 경우에는 어떻게 해야할까 ?
이 경우에는 scrollIntoView 만으로는 해결할 수가 없다.
1. scrollIntoView 를 이용하는 방법
target.scrollIntoView();
window.scrollBy(0, -margin);
2단계로 해당 기능을 구현할 수 있다.
맨 위로 찰삭 붙게 한 다음, 원하는 만큼의 간격을 주는 방법
2. window.scroll이용하기
window.scroll({
top: (target.offsetTop ?? 0) - (margin ?? 0),
});
타겟의 위치 - 원하는만큼의 간격
으로 한번에 이동하는 방법
참고 : 링크
728x90
300x250