Проблема в следующем:
- Вы проверяете, равно ли оно точно .Это будет редкостью
- Вы проверяете, если вниз по странице 1/3 rd , а не 2/3 rds
Попробуйте это - http://jsfiddle.net/y7Am2/:
$(window).scroll(function(){
var mostOfTheWayDown = ($(document).height() - $(window).height()) * 2 / 3;
if ($(window).scrollTop() >= mostOfTheWayDown)
{
alert('test');
}
});
Но я рекомендую использовать определенное значение пикселя снизу, а не дробное значение сверху.Основывайте его на высоте нижнего колонтитула (простое значение, настроенное вручную, или рассчитанное).
Возможно, ваш контент не имеет постоянной высоты.Если нет, и вы используете дробное значение, вы перейдете к тому, что кажется произвольной частью страницы, и загрузка будет стоять в очереди.Это сделает ваш веб-сайт непредсказуемым или, возможно, менее отзывчивым, если пользователи привыкли загружать его ранее на более длинные страницы.
Поэтому вместо этого сделайте что-то подобное - http://jsfiddle.net/PwZ4D/:
$(window).scroll(function(){
var mostOfTheWayDown = ($(document).height() - $(window).height())
- 150 - footerHeight;
// ...
Такжеобратите внимание, что в настоящее время ваше мероприятие будет продолжаться каждый раз, когда вы прокручиваете внизу страницы.Это поставит в очередь целую тонну вызовов AJAX.Вам, вероятно, следует отсоединить scroll
внутри своего события, а затем повторно связать его, когда ваш вызов ajax успешно завершится.
И будьте осторожны, обрабатывая случаи, когда у вас мало или совсем нет контента.Если страница пуста или данных достаточно для заполнения одного экрана, она может продолжать без необходимости повторно запрашивать сервер, если вы что-то делаете неправильно.
Редактировать:
По запросу вы отменяете событие scroll
с помощью кода, подобного следующему: http://jsfiddle.net/5vXJ5/:
$(window).unbind('scroll');
Редактировать:
Снова по запросу вы перепривязываететак же, как вы связали это для начала.Тем не менее, поскольку вы в конечном итоге получаете самоссылочный код, вам нужно назвать свою функцию.Окончательный код может выглядеть примерно так:
var scrollHandler;
scrollHandler = function(){
var mostOfTheWayDown = ($(document).height() - $(window).height()) * 2 / 3;
if ($(window).scrollTop() >= mostOfTheWayDown)
{
// So we don't queue up multiple requests until the first one completes
$(window).unbind('scroll');
$.ajax({
url: "test.html",
context: document.body,
success: function(){
$(window).scroll(scrollHandler); // re-bind after it completes
}
});
}
};
$(window).scroll(scrollHandler); // bind by named function
Это всего лишь пример.Вам придется настроить его в соответствии с вашим конкретным сценарием.