아래 데모에서 외부 요소의 높이 값은 200px이고 내부 요소의 높이 값은 300px입니다. 분명히 "외부 요소의 내용"은 "외부 요소" 자체보다 높습니다. 스크롤 막대를 아래로 드래그하면 내용의 일부가 "외부 요소의 위쪽 경계" 외부에 숨겨지고 scrollTop은 동일합니다. 이 "보이지 않는 콘텐츠"의 높이입니다.
데모: (스크롤 막대를 드래그하면 scrollTop 값의 변화를 볼 수 있습니다.)
이러한 텍스트는 내부 요소에 표시됩니다.
scrollTop 값은
설명 :
내부 레이어 요소의 높이 값이 300px입니다. > 외부 요소의 높이 값이 200px이므로 "외부 요소의 내용"(즉, "내부 요소")이 완전히 표시되지 않습니다. 그리고 바깥쪽 요소는 Overflow가 자동으로 설정되어 있어서 바깥쪽 요소의 오른쪽에 상하 슬라이딩 바가 나타나게 됩니다
초기 상태에서는 "내부 요소의 위쪽 경계선"과 "상단 요소"가 "바깥쪽 요소의 경계"가 서로 일치하고 "외부 요소의 위쪽 경계선"을 초과하는 내용이 없으면 이때 scrollTop 속성의 값은 0입니다.
스크롤 막대를 아래쪽으로 드래그하면 "외부 요소의 상한"을 초과하는 내용이 점차 증가하며, 이 초과된 부분만큼 scrollTop 값이 동일해집니다.
스크롤바를 아래쪽으로 드래그하면 "내부 요소의 하단 테두리"와 "외부 요소의 하단 테두리"가 일치하고, 내용의 높이가 "외부 요소의 상단 테두리"를 초과합니다. = 300px-200px= 100px, 이때의 scrollTop 값입니다.
js 코드를 읽고 scrollTop의 값을 씁니다
참고: scrollTop의 사용법은 element.style.scrollTop이 아니라 element.scrollTop입니다.
js 코드를 통해 scrollTop의 값을 읽습니다
위에서 데모 예제에서는 실제로 scrollTop의 읽기 작업이 사용되었습니다. 구체적으로 스크롤바를 드래그하는 과정에서 이때의 scrollTop 값을 읽어서 아래 텍스트로 표시하게 됩니다.
위 데모 예제의 전체 원본 코드:
]
설명 :
"외부 요소의 스크롤바"를 드래그하면 onscroll 이벤트가 발생합니다. scrollTop의 값을 읽어서 표시하는 이 이벤트의 이름을 딴 핸들러 함수를 등록하세요
scrollTop의 값을 읽어서 표시하는 이벤트 핸들러 함수에서 "외부 요소"는 외부 요소인 _div.scrollTop을 통해 얻습니다. 해당 시점의 scrollTop 값이 페이지에 표시됩니다.
js 코드를 통해 scrollTop의 값을 설정합니다.
위 데모 예시를 일부 수정합니다. 기능 추가: js 문을 통해 scrollTop 값 설정
예:
이러한 텍스트는 내부 요소에 표시됩니다.
scrollTop 값:
scrollTop을 50으로 설정 ScrollTop을 500으로 설정
scrollTop의 값 입력: OK
위 데모 예제의 전체 원본 코드:
解释:
形如div_外层元素A.scrollTop = 12345;的赋值语句会触发onscroll事件,使得读取scrollTop的值并显示出来函数执行一次
上一个例子中已经提到:当拖动滚动条到最底部时,scrollTop=300px-200px=100px,这是scrollTop能够取的最大值。当用更大的值赋给scrollTop时,scrollTop会自动把它转变为100。例如上面的“把scrollTop设为500”按钮,scrollTop会把500转变为100。
得到body元素的scrollTop
body元素的scrollTop是超出“浏览器窗口上边界”的内容的高度
当html文档头部包含有“文档类型声明”时,需要用document.documentElement.scrollTop获得正确的值,而document.body.scrollTop的值为0
当html文档头部不包含任何“文档类型声明”时,需要用document.body.scrollTop获得正确的值,而document.documentElement.scrollTop的值为0
下面定义的get_scrollTop_of_body()方法可以处理这种差异
function get_scrollTop_of_body(){
var scrollTop;
if(typeof window.pageYOffset != 'undefined'){
scrollTop = window.pageYOffset;
}
else
if(typeof document.compatMode != 'undefined' &&
document.compatMode != 'BackCompat'){
scrollTop = document.documentElement.scrollTop;
}
else
if(typeof document.body != 'undefined'){
scrollTop = document.body.scrollTop;
}
return scrollTop;
}