Скорее всего, здесь происходит две вещи:
- Кнопки иконки и остановки / обновления мерцают из-за ошибки Chrome (которая упоминает
pushState
, но изменения хеша
по тому же пути кода).
- Небольшой сбой при прокрутке объясняется тем, что Chrome выполняет полную перерисовку страницы и высококачественную шкалу для обновления эскиза страницы, поскольку рассматривает изменения хеш-функции при создании нового URL-адреса. Это также ошибка . Вы можете видеть это в представлении временной шкалы инспектора, большинство событий прокрутки приводит к перерисовке ширина окна x некоторой небольшой высоты , но иногда будет перерисовка полного окна. В этом блоге есть еще несколько деталей.
Обходной путь для обеих сторон - отложить обновление хэша до тех пор, пока пользователь не закончит прокрутку (вы все равно можете обновить белую полосу, которая появляется под текущим элементом немедленно). Вы можете сделать это, имея что-то вроде:
var scrollTimeout;
window.onscroll = function() {
// update current item display here
if (scrollTimeout)
clearTimeout(scrollTimeout);
scrollTimeout = setTimeout(function() {
scrolTimeout = undefined;
// update hash here
}, 100);
};
Так как похоже, что вы используете jQuery, есть плагины для разбора , которые могут быть полезны.