[Text Node 제어와 Document 및 스크린, 스크롤 위치 제어]
1. [ Text Node의 제어 ]
- 텍스트 데이터 확인 : ELEMENT.data or ELEMENT.nodeValue
- 텍스트 데이터 조작
-- element.appendData("추가할 텍스트 문자열") : 맨 마지막 부분에 문자열 추가
-- element.deleteData( startIndex, length ) : 해당 index부터 몇글자 지울지
-- element.insertData( startIndex, "추가할 문자열" ) : 해당 index 위치에 삽입
-- element.replaceData( startIndex, length, "바꿀 문자열" ) : 해당 index부터 length글자만큼을 새로운 바꿀 문자열로 교체
-- element.substringData( startIndex, length ) : 해당 인덱스부터 length개만큼 가져옴
1 2 3 4 5 6 7 8 9 10 | <ul> <li id="target">html</li> <li>css</li> <li>JavaScript</li></ul><script> var t = document.getElementById('target').firstChild; console.log(t.nodeValue); console.log(t.data);</script> |
<!DOCTYPE html><html><head> <style> #target{ font-size:77px; font-family: georgia; border-bottom:1px solid black; padding-bottom:10px; } p{ margin:5px; } </style></head><body><p id="target">Cording everybody!</p><p> data : <input type="text" id="datasource" value="JavaScript" /></p><p> start :<input type="text" id="start" value="5" /></p><p> end : <input type="text" id="end" value="5" /></p><p><input type="button" value="appendData(data)" onclick="callAppendData()" /><input type="button" value="deleteData(start,end)" onclick="callDeleteData()" /><input type="button" value="insertData(start,data)" onclick="callInsertData()" /><input type="button" value="replaceData(start,end,data)" onclick="callReplaceData()" /><input type="button" value="substringData(start,end)" onclick="callSubstringData()" /></p><script> var target = document.getElementById('target').firstChild; var data = document.getElementById('datasource'); var start = document.getElementById('start'); var end = document.getElementById('end'); function callAppendData(){ target.appendData(data.value); } function callDeleteData(){ target.deleteData(start.value, end.value); } function callInsertData(){ target.insertData(start.value, data.value); } function callReplaceData(){ target.replaceData(start.value, end.value, data.value); } function callSubstringData(){ alert(target.substringData(start.value, end.value)); }</script></body></html>2. [ Document(문서)의 Element 위치 알아내기 ]
var positionInfo = Element.getBoundingClientRect();
-> getBoundingClientRect()는 width, height, top, left, right, bottom 프러퍼티를 갖는 객체이다.
- width : element의 가로 길이
- height : 세로길이
- top : viewport(아래에서 설명) 맨 위에서부터 element까지 y축 길이
- left : viewport 맨 좌측에서부터 element까지 x축 길이
- right : viewport 맨 좌측에서 element 맨 오른쪽까지 길이
- bottom : viewport 맨 위에서 element 맨 아래까지 길이
1) -> 하지만, getBoundingClientRect()는 구버전 브라우저에서는 제공하지 않는 경우도 있다. 따라서,
element의 좌표를 구할 때 element.offsetLeft, element.offsetTop을 사용하면 된다. == element.getBoundingClientRect().left|top
- 테두리를 제외한 width와 height 값 구하기
- element.clientWidth
- element.clientHeight
2) -> 때떄로, 어떤 Element들은 해당 Element를 감싸고 있는 부모 Element가 position static인 경우 부모로 부터의 위치를 기준으로
자신의 offsetLeft, offsetTop값을 반환하게 된다.
따라서, 문서에서의 정확한 위치를 구하기 위해서는 다음과 같은 코드를 사용할 수 있다.
( 해당 Element를 포함하고 있는 부모 Element를 추적하면서 위치값을 더해감)
3. [ viewport란? 스크롤을 고려한 문서내의 Element의 위치 ]
- 1) Viewport(뷰포트)
: 문서 전체의 크기가 있을 때 예를들어 우리가 브라우저를 줄이게 될 경우 전체 Document가 다 보이지 않고
창 크기에 맞춰 일부분의 문서만 보일 것이다.
이때, 보이는 영역이 ViewPort이다.
--> 우리가 아까 위에서 element.offsetLeft, element.offsetTop 등이 viewport에서부터의 거리를 나타내고 있는 것이다.
따라서, 스크롤이 개입되게 되면, 해당 위치는 문서 전체를 기준으로했을 때 정확하지 않게 될 수 있다.
2) 스크롤의 위치는 어떻게 구할까?
-> window.pageYoffset
: y축 스크롤을 움직인 거리(문서가 가려진 y축 길이)
-> window.pageXoffset
: x축 스크롤을 움직인 거리(문서가 가려진 x축 길이)
3) viewport에서부터의 거리와 스크롤과의 관계
-> 스크롤을 내릴 수록 pageYoffset값은 커질 것이다. 그러면 offsetTop값을 기준으로 보면 어떻게 될까?
스크롤이 내려간만큼 그 길이는 짧아지게 된다.
예를들어, A라는 Element의 offsetTop값이 맨 처음 200이고 pageYoffset이 0이었을 때
스크롤을 40px만큼 내려 pageYoffset이 40이 되면
offsetTop값은 200 - 40 인 160이 되게 된다.
전체문서에서 보이는 viewport를 기준으로 하기 때문이다.
따라서, 전체 문서에서의 위치를 구하려면 어떻게 해야할까?
--> element.offsetTop(뷰포트좌표) + window.pageYoffset(스크롤된 정도)
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 | <style> body{ padding:0; margin:0; } div{ border:50px solid #1065e6; padding:50px; margin:50px; } #target{ width:100px; height:2000px; }</style> <div> <div id="target"> Coding </div> </div><script>var t = document.getElementById('target');setInterval(function(){ console.log('getBoundingClientRect : ', t.getBoundingClientRect().top, 'pageYOffset:', window.pageYOffset);}, 1000)</script> |
4. [ 스크롤 제어 ]
: 스크롤을 특정 위치로 이동시키는 방법
-> window.scrollTop(x, y); // x축, y축
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 | <style> body{ padding:0; margin:0; } div{ border:50px solid #1065e6; padding:50px; margin:50px; } #target{ width:100px; height:2000px; }</style><input type="button" id="scrollBtn" value="scroll(0, 1000)" /><script> document.getElementById('scrollBtn').addEventListener('click', function(){ window.scrollTo(0, 1000); })</script><div> <div id="target"> Coding </div></div> |
5. [ Viewport의 크기와 사용자 모니터 크기 구하기 ]
- Viewport 크기
: window.innerWidth
window.innerHeight
- 사용자 모니터 크기
: screen.width
: screen.height
'스터디 > 자바스크립트 완벽 가이드 정리' 카테고리의 다른 글
| Node 객체에 대하여(NODE 객체와 NODE객체 컨트롤하기) (0) | 2017.12.03 |
|---|---|
| 이벤트 및 우클릭 방지 (0) | 2017.11.28 |
| 5판 7장 객체(Object)와 배열(Array) (0) | 2017.11.13 |