Есть блок, который движется по горизонтальной оси при скролле. Этот блок имеет ширину 300px. Ширина вьюпорта 1920px.
Соответственно, я могу узнать абсолютное положение блока при помощи getBoundingClientRect().left (учитываю именно левую грань блока).
Далее таким образом несложно посчитать относительное положение блока на экране:
let posX = elem.getBoundingClientRect().left;
let screenWidth = document.documentElement.clientWidth;
let elapsed = posX / screenWidth * 100; //узнаем относительное положение элемента на экране
Но что если за начало я хочу взять -300px от начала вьюпорта? То есть я хочу чтобы отсчет «нулевой» точки был равен ширине блока. Как в таком случае отсчитывать прогресс блока от 0 до 100%?