Я использую плагин jQuery Waypoints для динамической загрузки следующей статьи в серии, когда читатель приближается к конец текущей статьи. Таким образом, одна путевая точка запускает этот запрос ajax.
У меня также есть путевая точка, прикрепленная к элементу-оболочке каждой статьи, которая срабатывает как когда статья приближается к верхней части экрана (при прокрутке вниз), так и когда она появляется примерно на полпути к экрану (при прокрутке вверх) — эти функции обновляют заголовок и URL страницы в адресной строке.
Все это работает, но я обнаружил, что когда я загружаю несколько статей, когда обновляются путевые точки (как это происходит при добавлении новой путевой точки), активируются все путевые точки предыдущих статей, поэтому я могу видеть строка заголовка быстро пробегает по всем предыдущим заголовкам/URL.
Я думал, что добавление continuous: false
к .entry-wrapper
путевым точкам исправит это (из документации;: «если false, это сработает, только если это последняя путевая точка»), но, увы, это не так.
Любые идеи? Код следует:
/*
Load the next entry via AJAX when we near the end of each entry
*/
$('.load-trigger').waypoint(
function()
{
url = $('.load-next:last').data('url');
if(url)
{
$.get(url, function(data)
{
/*
We only want the content
*/
entry = $(data).find('.entry-wrapper').hide();
/*
Add it to the DOM
*/
$('.content').append(entry);
/*
Fade-in
*/
$(entry).fadeIn(500, function()
{
/*
When scrolling down, push a new history state when the new entry reaches the top of the window
*/
$('.entry-wrapper').waypoint(function(direction)
{
if(direction === 'down')
{
history.pushState('', $(this).data('title'), $(this).data('url'));
document.title = $(this).data('title');
}
},
{
continuous: false,
offset: '100px'
});
/*
When scrolling back up, push a new history state when the previous entry is filling roughly half of the window
(see offset)
*/
$('.entry-wrapper').waypoint(function(direction)
{
if(direction === 'up')
{
history.pushState('', $(this).data('title'), $(this).data('url'));
document.title = $(this).data('title');
}
},
{
continuous: false,
offset: function(){ return ($(this).height() * -1) + ($.waypoints('viewportHeight') / 2) }
});
});
});
}
},
{
offset: '120%'
}
);
Упрощенная разметка:
<div class="content">
<div class="entry-wrapper" data-title="Foo baz bar" data-url="http://foo.bar/bing>
...
<div class="load-next" data-url="http://foo.bar/baz"></div>
</div>
</div>
<div class="load-trigger"></div>