일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
- 프로그래머스 데브코스
- intersection opserver
- netlify redirect
- vue 지역 컴포넌트
- SCSS forward
- 쌓임맥락
- Vue
- SCSS use
- 프로그래머스 K_Digital Training
- vue 이벤트 수신
- postcss
- KDT 프로그래머스 데브코스 프론트엔드
- Spacer
- 리액트
- 다른컴퓨터에서 git사용
- vue mixin
- react next
- 리스트 렌더링
- 폼 입력 바인딩
- SCSS import
- git 같은계정 다른 컴퓨터
- nextjs사용법
- flex
- SCSS extend
- 고양이 사진 검색기
- vuex map
- 이벤트 수식어
- 프로그래머스 데브코스 프론트엔드
- 프로그래머스 프론트엔드 데브코스
- KDT 프로그래머스
- Today
- Total
혼자 적어보는 노트
[Javascript] clientWidth, clientHeight / scrollWidth, scrollHeight / scrollTop , scrollLeft 본문
[Javascript] clientWidth, clientHeight / scrollWidth, scrollHeight / scrollTop , scrollLeft
jinist 2021. 11. 24. 01:45
clientWidth / clientHeight
border 안의 사이즈 값
요소의 너비와 패딩을 포함한 값 (*스크롤바의 너비는 포함하지 않는다)
<style>
#example {
width: 300px;
height: 200px;
margin:20px;
padding:25px;
border: 10px solid black;
background-color: tomato;
}
</style>
<div id="example"></div>
<script>
const example = document.getElementById("example");
console.log(example.clientWidth); // 350
console.log(example.clientHeight); // 250
</script>
clientWidth : 기본 width(300px) + 양 쪽 padding (25px + 25px) = 350
clientHeight : 기본 height(200px) + 위 아래 padding (25px + 25px) = 250
스크롤을 추가해보자.
<style>
#example {
width: 300px;
height: 200px;
margin:20px;
padding:25px;
border: 10px solid black;
background-color: tomato;
overflow:auto;
}
</style>
<div id="example">
//생략
</div>
<script>
const example = document.getElementById("example");
console.log(example.clientWidth); // 333
console.log(example.clientHeight); // 250
</script>
<script src="./test.js"></script>
스크롤이 없었을 땐 clientWidth 가 350였지만
스크롤이 추가 되니 콘텐츠의 영역에 스크롤바가 할당되어
333으로 줄어든 것을 볼 수 있다.
*스크롤바의 너비는 브라우저마다 다르다
scrollWidth / scrollHeight
clientWidth와 clientHeight과 비슷하지만 스크롤바에 가려진
요소의 영역도 포함되는 점이 다르다.
<style>
#example {
width: 300px;
height: 200px;
padding: 25px;
margin:20px;
border: 10px solid black;
background-color: tomato;
overflow: auto;
}
</style>
<div id="example">
//생략
</div>
<script>
const example = document.getElementById("example");
console.log(example.scrollWidth); // 333
console.log(example.scrollHeight); // 302
</script>
<script src="./test.js"></script>
scrollWidth : border안쪽의 가로너비(350px) - 스크롤바의 너비(17px) = 333
scrollHeight : border안쪽의 세로너비(250px) + 스크롤로 가려진 영역 = 302
overflow: hidden으로 스크롤바를 안보이게 한다면?
scrollWidth : border안쪽의 가로너비(350px) - 스크롤바의 너비(0) = 350
scrollHeight : border안쪽의 세로너비(250px) + 스크롤로 가려진 영역 = 302
스크롤 바로 인해 줄어들었던 width는 원래의 콘텐츠값으로 변경되고
height는 가려진 영역의 값을 그대로 포함하고 있는것을 확인할 수 있다.
scrollLeft / scrollTop
스크롤의 움직임에 따라 가려진 영역의 너비와 높이의 값을 구해준다.
#example {
width: 300px;
height: 200px;
padding: 25px;
margin:20px;
border: 10px solid black;
background-color: tomato;
overflow: auto;
}
</style>
<div id="example">
//생략
</div>
<script>
const example = document.getElementById("example");
function handleScroll(){
console.log(example.scrollTop);
}
example.addEventListener("scroll", handleScroll);
console.log(example.scrollWidth); // 333
console.log(example.scrollHeight); // 302
</script>
스크롤시에 scrollTop의 값을 console에 보여지게끔 코드를 작성했다.
현재 scrollHeight는 302이며 원래 콘텐츠의 영역은 250이였으니 가려진 영역은 52로 볼 수 있다.
해당 example에서 스크롤을 하면 0에서 부터 맨 밑까지 스크롤시 scrollTop이 52까지 올라가는것으로 확인된다.
즉 스크롤을 밑으로 내리면 영역이 위로 올라감으로써 위쪽의 영역이 가려지게되는데 이 값이 scrollTop이다.
scrollLeft도 같은 방식으로 적용된다.
그러면 위의 정보들로 구할수 있는 값은 무엇이 있을까?
scrollTop의 정보는 구할 수 있지만 하단 기준으로 얼마나 스크롤이 되었는지 확인하려면?
let bottom = example.scrollHeight - example.clientHeight - example.scrollTop;
위와 같이 값을 구할 수 있다.
'Javascript' 카테고리의 다른 글
[Javascript] 부모 클릭 이벤트 자식요소 클릭 시 무시 시키는 방법 (0) | 2021.12.03 |
---|---|
[Javascript] 데이터 타입 별 데이터 할당 / 불변 값 / 가변 값 (0) | 2021.12.02 |
[Javascript] offsetTop, offsetLeft / offsetParent / offsetWidth, offsetHeight (0) | 2021.11.24 |
[Javascript] async await에 대한 이해 (0) | 2021.11.23 |
[Javascript] Promise에 대한 이해 (0) | 2021.11.23 |