Рассчитать высоту полосы прокрутки в соответствии с количеством скрытого содержимого - PullRequest
8 голосов
/ 29 января 2010

Я создаю графическую полосу прокрутки, поэтому мне нужно вычислить высоту полосы прокрутки вручную. Вы знаете, как в большинстве приложений высота полосы прокрутки изменяется в зависимости от объема прокрутки?

Какова формула для расчета высоты полосы прокрутки на основе количества скрытого содержимого? Является ли это логарифмическим, экспоненциальным или просто основанным на проценте видимого содержимого по сравнению с скрытым содержимым?

Это мои входные переменные:

  • Видимая область - например. 100 пикселей
  • Высота содержимого - например. 1000 пикселей
  • Макс. Высота полосы прокрутки - например. 500 пикселей

Вот что я хочу вычислить:

  • Высота полосы прокрутки - например. 50 px ??

Ответы [ 3 ]

9 голосов
/ 29 января 2010

Обычно это проценты.

например. если видимая область составляет 99% от полной области, полоса прокрутки составляет 99% от высоты.

Аналогично, если видимая область составляет 50% от полной области, полоса прокрутки составляет 50% от высоты.

Просто убедитесь, что минимальный размер является чем-то разумным (например, не менее 18-20 пикселей)

Таким образом, если у вас видимая высота 500px и содержимое 50,000px, даже если оно должно сделать высоту винта с накатанной головкой (1% от 500px = 5px) ... вместо этого используйте минимум по умолчанию (например, 20 пикселей)

0 голосов
/ 29 января 2010

Я думаю, что линейная формула подойдет. Предположим, что максимальная высота полосы прокрутки равна максимальной высоте видимой области, псевдокод будет выглядеть так:

scrollbar_visible=true;
if (content_height < visible_height) {scrollbar_visible = false; return;} // hide the scrollbar if there'se nothing to scroll
scrollbar_height = visible_height/content_height;
scrollbar_height = min(scrollbar_height, min_scrollbar_height); // don't let the scrollbar become smaller than some predefined size
0 голосов
/ 29 января 2010

Я бы использовал Procent.Так что, если видимая область составляет 45% от высоты содержимого.Высота полосы прокрутки будет 45% от максимальной высоты полосы прокрутки.Это кажется правильным для начала.Поэтому, если вы видите полосу прокрутки в верхней части, вы знаете, что она примерно вдвое больше контента.

Но я думаю, что вам нужен какой-то нижний предел того, насколько маленькой может быть полоса прокрутки для того, чтобы пользователь нажимал на нее.

...