在jquery中回答了同样的问题,但我正在寻找没有jQuery的解决方案。 How do you know the scroll bar has reached bottom of a page
我想知道如何确定垂直滚动条是否已到达网页的底部。
我正在使用Firefox3.6
我编写了简单的Javascript循环向下滚动200像素,当滚动条到达页面底部时,我想停止循环。
问题是 scrollHeight()返回1989年。
内部循环scrollTop
每次迭代增加200。
200 ==> 400 ==> 600 .... 1715
从1715年开始,它不会增加,所以这个循环会永远持续下去。
看起来像scrollHeight()和scrollTop()是不正确的比较方式,以确定滚动条的实际位置?我怎么知道循环何时停止?
码
var curWindow = selenium.browserbot.getCurrentWindow();
var scrollTop = curWindow.document.body.scrollTop;
alert('scrollHeight==>' + curWindow.document.body.scrollHeight);
while(curWindow.document.body.scrollHeight > curWindow.document.body.scrollTop) {
scrollTop = curWindow.document.body.scrollTop;
if(scrollTop == 0) {
if(window.pageYOffset) { //firefox
alert('firefox');
scrollTop = window.pageYOffset;
}
else { //IE
alert('IE');
scrollTop = (curWindow.document.body.parentElement) ? curWindow.document.body.parentElement.scrollTop : 0;
}
} //end outer if
alert('current scrollTop ==> ' + scrollTop);
alert('take a shot here');
selenium.browserbot.getCurrentWindow().scrollBy(0,200);
} //end while
答案 0 :(得分:8)
当你告诉一个元素滚动时,如果它的scrollTop
(或任何适当的属性)没有改变,那么你不能认为它已经滚动到有能力吗?
所以你可以跟踪旧的scrollTop
,告诉它滚动一些,然后检查它是否真的这样做了:
function scroller() {
var old = someElem.scrollTop;
someElem.scrollTop += 200;
if (someElem.scrollTop > old) {
// we still have some scrolling to do...
} else {
// we have reached rock bottom
}
}
答案 1 :(得分:7)
我刚刚阅读了jQuery源代码,看起来你需要“pageYOffset”。然后你可以得到窗口高度和文档高度。
这样的事情:
var yLeftToGo = document.height - (window.pageYOffset + window.innerHeight);
如果yLeftToGo为0,那么你就在底部。至少这是一般的想法。
答案 2 :(得分:4)
function scrollHandler(theElement){
if((theElement.scrollHeight - theElement.scrollTop) + "px" == theElement.style.height)
alert("Bottom");
}
对于HTML元素(如div),添加事件 - onscroll ='scrollHandler(this)'。
答案 3 :(得分:4)
检查您是否到达页面底部的正确方法是:
document.body.clientHeight
=显示的ACTUAL屏幕的高度document.body.offsetHeight
或document.body.scrollHeight =显示的整个页面的高度document.body.scrollTop
= document.body.scrollHeight - document.body.clientHeight
如果3为真,则到达页面底部
答案 4 :(得分:1)
以下是我用来为无限滚动列表视图提供动力的一些代码:
var isBelowBuffer = false; // Flag to prevent actions from firing multiple times
$(window).scroll(function() {
// Anytime user scrolls to the bottom
if (isScrolledToBottom(30) === true) {
if (isBelowBuffer === false) {
// ... do something
}
isBelowBuffer = true;
} else {
isBelowBuffer = false;
}
});
function isScrolledToBottom(buffer) {
var pageHeight = document.body.scrollHeight;
// NOTE: IE and the other browsers handle scrollTop and pageYOffset differently
var pagePosition = document.body.offsetHeight + Math.max(parseInt(document.body.scrollTop), parseInt(window.pageYOffset - 1));
buffer = buffer || 0;
console.log(pagePosition + "px / " + (pageHeight) + "px");
return pagePosition >= (pageHeight - buffer);
}
答案 5 :(得分:0)
<span id="add"></add>
<script>
window.onscroll = scroll;
function scroll () {
if (window.pageYOffset + window.innerHeight >= document.body.scrollHeight - 100) {
document.getElementById("add").innerHTML += 'test<br />test<br />test<br />test<br />test<br />';
}
}
</script>