Функция значения ползунка, подходящего для масштабирования - PullRequest
0 голосов
/ 05 марта 2010

Я использую jquery пользовательский интерфейс для увеличения. Предполагается увеличить масштаб от 25% до% 500, и примерно половина диапазона используется для первых% 100 размера.

Ползунок имеет значения от 1 до 100. Мне нужна некоторая функция, которую можно использовать для вычисления масштабирования на основе значения ползунка, например,

function getZoom(sliderVal) {
    //return number from 25 to 500
}

Есть предложения?

Ответы [ 2 ]

2 голосов
/ 06 марта 2010

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

В Javascript есть Math.pow (a, b), который вычисляет b .

Параметр имеет больше смысла, если вы отображаете диапазон от [0,100] до [25%, 400%], потому что тогда 50 находится в точной средней точке и его можно легко отобразить на 100%. 50 точек на ползунке соответствуют делению или умножению на четыре, поэтому вы можете установить

scaling = Math.pow(2,(slider - 50) / 25);

Итак, вы получите отображение ниже:

slider     scaling
------------------
     0     2**-2 = 1/4 =  25%
    25     2**-1 = 1/2 =  50%
    50     2**0  = 1   = 100%
    75     2**1  = 2   = 200%
   100     2**2  = 4   = 400%

Теперь я вижу, что это не дает полного ответа на ваш вопрос, потому что ваша шкала равна [1100] вместо [0,100], и вы хотите достичь 500% вместо 400%.

Чтобы попасть туда, вы можете сначала нормализовать ползунок:

slider_n = (slider - 1) * (100/99);

(это сопоставляет [1100] с [0,100]), а затем, если хотите, умножьте положительные значения показателя степени на (log 5) / (log 4), чтобы ваш масштаб заканчивался 500%, то есть

exp = (slider_n - 50) / 25.0;
if (exp > 0) exp = exp * Math.log(5)/Math.log(4);
scaling = Math.pow(2,exp);
1 голос
/ 05 марта 2010

В основном вы хотите что-то изменить масштаб с 1-100 до 25-500.

100-1 = 99
500-25 = 475

так что это ваш коэффициент масштабирования - каждая разница на вашем слайдере равна 475/99 точкам различия на увеличении.

А фиксированное смещение - всего 1 и 25, что дает простую формулу:

f( slider_value ) =
    ( slider_value - 1 ) * ( 475 / 99 ) + 25

Конечно, если вы хотите обобщить, две шкалы от (a,b) до (c,d):

 f( slider_value ) =
     ( slider_value - a ) * ( ( d - c ) / ( b - a ) ) + c

Теперь, если вы хотите сделать что-то наполовину, вы можете просто использовать приведенную выше формулу, чтобы разделить нужные вам части и вызывать различные функции, зависящие от значения ползунка. Пока они непрерывны (значения одинаковы для граничных случаев), все должно быть хорошо.

В вашем случае попробуйте сопоставить от 1-50,5 до 25% -100%, от 50,5-100 до 100% -500%.

...