aldtimofeev
@aldtimofeev
front-end / html-верстальщик

Как постепенно уменьшать элемент при скролле?

т.е. чтобы он не уменьшался при достижении определённого уровня, а на протяжении всего движения до этого уровня постепенно уменьшался.
  • Вопрос задан
  • 1481 просмотр
Решения вопроса 1
delphinpro
@delphinpro Куратор тега CSS
frontend developer
посчитали высоту страницы (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';
});


И демо на фиддле
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 1
t3h_l3w1z
@t3h_l3w1z
Обкашливаю вопросики.
Можно взять высоту всей страницы, посчитать проценты от нее, соотнести со скроллом, а там уже и решать.

Можно сразу эти проценты в css кидать, например, если это скроллбар.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы