У меня есть слой div
с overflow
, установленный на scroll
.javascript: обнаружить конец прокрутки
Когда прокручивается до нижней части div
, я хочу запустить функцию.
У меня есть слой div
с overflow
, установленный на scroll
.javascript: обнаружить конец прокрутки
Когда прокручивается до нижней части div
, я хочу запустить функцию.
Принятый ответ был в корне ошибочным, с тех пор он был удален. Правильный ответ:
function scrolled(e) {
if (myDiv.offsetHeight + myDiv.scrollTop >= myDiv.scrollHeight) {
scrolledToBottom(e);
}
}
Протестировано в Firefox, Chrome и Opera. Оно работает.
Можете ли вы сообщить нам, почему это испорчено? – SpoonMeiser
Поскольку он не обнаруживает конца прокрутки вообще, он обнаруживает, когда часть страницы, прокручиваемой вверх и высота содержащего div, одинаковы! Предположим, что у вас есть дважды содержимое для прокрутки, чем высота div, как только вы достигли самого конца, значение scrollTop будет в два раза больше, чем смещение. Принятый ответ проверяет, равны ли они, и он не обнаружит конца. Мое решение проверяет, соответствует ли scrollTop + высота контейнера (или больше, чем это происходит) всей области прокрутки, теперь это нижняя часть! –
@Alex 'window.location.href = 'http: //newurl.com';' или 'window.open ('http://newurl.com');' + код выше. –
Я не мог получить ни один из приведенных выше ответов, чтобы работать, поэтому вот третий вариант, который работает для меня! (Используется с jQuery)
if (($(window).innerHeight() + $(window).scrollTop()) >= $("body").height()) {
//do stuff
}
Надеюсь, это поможет любому!
работал отлично, спасибо – Amir5000
Это работает для меня:
$(window).scroll(function() {
buffer = 40 // # of pixels from bottom of scroll to fire your function. Can be 0
if ($(".myDiv").prop('scrollHeight') - $(".myDiv").scrollTop() <= $(".myDiv").height() + buffer) {
doThing();
}
});
должны использовать JQuery 1.6 или выше
я нашел альтернативу, которая работает.
Ни один из этих ответов не работал для меня (в настоящее время тестируется в FireFox 22.0), и после многих исследований я нашел, как представляется, гораздо более чистое и прямое решение.
Реализовано решение:
function IsScrollbarAtBottom() {
var documentHeight = $(document).height();
var scrollDifference = $(window).height() + $(window).scrollTop();
return (documentHeight == scrollDifference);
}
С уважением
OK Вот хороший и правильное решение
Поступил вызов Div с id="myDiv"
поэтому функция g OES.
function GetScrollerEndPoint()
{
var scrollHeight = $("#myDiv").prop('scrollHeight');
var divHeight = $("#myDiv").height();
var scrollerEndPoint = scrollHeight - divHeight;
var divScrollerTop = $("#myDiv").scrollTop();
if(divScrollerTop === scrollerEndPoint)
{
//Your Code
//The Div scroller has reached the bottom
}
}
Взгляните на этот пример: MDN Element.scrollHeight
Я рекомендую почитать этот пример: stackoverflow.com/a/24815216..., который реализует обработку для действия прокрутки кросс-браузер.
Вы можете использовать следующий фрагмент кода:
//attaches the "scroll" event
$(window).scroll(function (e) {
var target = e.currentTarget,
scrollTop = target.scrollTop || window.pageYOffset,
scrollHeight = target.scrollHeight || document.body.scrollHeight;
if (scrollHeight - scrollTop === $(target).innerHeight()) {
console.log("► End of scroll");
}
});
Поскольку innerHeight
не работает в некоторых старых версиях IE, clientHeight
могут быть использованы:
$(window).scroll(function (e){
var body = document.body;
//alert (body.clientHeight);
var scrollTop = this.pageYOffset || body.scrollTop;
if (body.scrollHeight - scrollTop === parseFloat(body.clientHeight)) {
loadMoreNews();
}
});
Я создал решение, основанное на событии на основе Бьорн Типлинг:
(function(doc){
'use strict';
window.onscroll = function (event) {
if (isEndOfElement(doc.body)){
sendNewEvent('end-of-page-reached');
}
};
function isEndOfElement(element){
//visible height + pixel scrolled = total height
return element.offsetHeight + element.scrollTop >= element.scrollHeight;
}
function sendNewEvent(eventName){
var event = doc.createEvent('Event');
event.initEvent(eventName, true, true);
doc.dispatchEvent(event);
}
}(document));
И вы используете канун нт, как это:
document.addEventListener('end-of-page-reached', function(){
console.log('you reached the end of the page');
});
BTW: вам нужно добавить этот CSS для JavaScript, чтобы знать, как долго страница
html, body {
height: 100%;
}
Теперь я вижу, что OP запросил конец div, а не конец страницы, но я оставлю здесь ответ, если он поможет кому-то другому. – Pylinux
проверить это [jsfiddle демо] (HTTP: //jsfiddle.net/lesson8/hjQca/show/) – Sender