посчитали высоту страницы (
hp
), высоту окна (
hw
)
получили максимальный скролл
smax = hp - hw
и минимальный
smin = 0
знаем начальный (
hmax
) и конечный (
hmin
) размеры целевого элемента
получаем текущую величину скролла (
s
)
вычисляем диапазоны изменений
ds = smax - smin = smax
dh = hmax - hmin
отсюда вытекает что
s / ds = h / dh , где h - приращение высоты целевого элемента
=>
h = hmax - (dh * s) / ds
Если нужно увеличивать элемент, меняем последнюю формулу
h = (dh * s) / ds + hmin
Итоговый код (подробный)var element = document.getElementById('d');
var hp = document.body.scrollHeight,
hw = window.innerHeight,
smax = hp - hw,
smin = 0,
hmin = 100,
hmax = 300,
ds = smax - smin,
dh = hmax - hmin;
window.addEventListener('scroll', function () {
var s = window.pageYOffset; // current scrollTop
var h = hmax - (dh * s) / ds;
element.style.height = h + 'px';
});
Сокращенныйvar element = document.getElementById('d');
var hmin = 100,
hmax = 300;
window.addEventListener('scroll', function () {
var s = window.pageYOffset; // current scrollTop
var h = hmax - ((hmax - hmin) * s) / (document.body.scrollHeight - window.innerHeight);
element.style.height = h + 'px';
});
И
демо на фиддле