2010-03-05 34 views
0

我正在使用jquery ui slider進行縮放。它應該從25%縮放到500%,大約一半的範圍用於大小的前100%。適用於縮放的滑塊值函數

滑塊的值爲1到100.我需要一些可用於基於滑塊值計算縮放的函數,例如,

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

有什麼建議嗎?

回答

2

我認爲如果您提供指數擬合,對用戶更好。

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% 

現在我明白了,這不回答你的完全是因爲你的規模是[1,100]而不是[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

基本上你想重新調整從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%。