Я обновляю заголовок таблицы и ее первые позиции столбцов программно на основе того, как пользователь прокручивается, чтобы поддерживать выравнивание.
Проблема, с которой я сталкиваюсь, заключается в том, что, как только мои наборы данных становятся достаточно большими, прокрутка становится все более и более прерывистой/менее плавной.
Соответствующий код находится в самом низу скрипта:
iScroll.on('scroll', function(){
var pos = $('#scroller').position();
$('#pos').text('pos.left=' + pos.left + ' pos.top=' + pos.top);
// code to hold first row and first column
$('#scroller th:nth-child(1)').css({top: (-pos.top), left: (-pos.left), position:'relative'});
$('#scroller th:nth-child(n+1)').css({top: (-pos.top), position:'relative'});
// this seems to be the most expensive operation:
$('#scroller td:nth-child(1)').css({left: (-pos.left), position:'relative'});
});
Я знаю, что это может быть написано намного более эффективно, кэшируя элементы и так далее. Например, я попытался сохранить элементы в массиве и обновить их позицию в режиме "vanilla":
headerElements[i].style.left = left + 'px'; // etc...
Независимо от того, насколько быстро я делаю обратный вызов, я все еще не доволен результатом. Есть ли у вас какие-либо предложения?