Я работаю над задачей, в которой каждый раз, когда пользователь прокручивает или изменяет размер экрана, я хотел бы пересчитать свойства CSS для элемента.
Допустим, я хочу включить индикатор выполнения и отчет о ходе выполнения отображаются на основе позиции прокрутки в окне
<div class='progress-bar-wrap'>
<div class='progress-bar-progress'></div>
</div>
function updateScrollProgress () {
this.progressIndicator.css('width', this.calculateProgressBarWidth() + 'px');
}
Я пытался зацепить события прокрутки и изменить их размер, но это, похоже, имеет запаздывающий эффект.
window.on('scroll', updateScrollProgress)
window.on('resize', updateScrollProgress)
Я попытался в прокрутке и изменить размер обработчиков событий для requestAnimationFrame
window.on('scroll', function(){window.requestAnimationFrame( updateScrollProgress))
window.on('resize', function(){window.requestAnimationFrame( updateScrollProgress))
И испытал огромное улучшение в большинстве браузеров, однако иногда он все еще отстает.
Я пытался запросить другой кадр, когда из обработчика requestAnimationFrame:
function updateScrollProgress () {
window.requestAnimationFrame( updateScrollProgress)
this.progressIndicator.css('width', this.calculateProgressBarWidth() + 'px');
}
Это полностью устраняет эффект задержки, но приводит к стоимости бесконечного цикла вызовов этого метода, даже когда не требуется никаких пересчетов.
Есть ли способ перехватить обработчик непосредственно перед тем, как браузер решит нарисовать элемент (ы), чтобы я мог предоставить / установить эти "динамические" значения css для свойства?