Javascript 适用于缩放的滑块值的函数

Javascript 适用于缩放的滑块值的函数,javascript,jquery,algorithm,function,relation,Javascript,Jquery,Algorithm,Function,Relation,我正在使用jquery进行缩放。它应该从25%缩放到%500,大约一半的范围用于大小的前%100 滑块的值从1到100。我需要一些函数,可以用来计算缩放基于滑块值,例如 function getZoom(sliderVal) { //return number from 25 to 500 } 有什么建议吗?基本上,您希望将某个对象从1-100重新缩放到25-500 100-1 = 99 500-25 = 475 这就是你的比例因子-滑块上的每个差异点都是缩放上的475/99差异点

我正在使用jquery进行缩放。它应该从25%缩放到%500,大约一半的范围用于大小的前%100

滑块的值从1到100。我需要一些函数,可以用来计算缩放基于滑块值,例如

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

有什么建议吗?

基本上,您希望将某个对象从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)
,有两个尺度:

现在,如果你想做一些对半的事情,你可以使用上面的公式来划分你想要的部分,然后调用不同的函数,根据滑块的值而变化。只要它们是连续的(值对于边界情况是相同的),就应该感觉良好


对于您的情况,请尝试将1-50.5映射到25%-100%,50.5-100映射到100%-500%。

基本上,您希望将某个对象从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)
,有两个尺度:

现在,如果你想做一些对半的事情,你可以使用上面的公式来划分你想要的部分,然后调用不同的函数,根据滑块的值而变化。只要它们是连续的(值对于边界情况是相同的),就应该感觉良好


对于您的情况,请尝试将1-50.5映射到25%-100%,50.5-100映射到100%-500%。

我认为如果您提供指数拟合,对用户更有利

Javascript有Math.pow(a,b),它计算ab

如果将范围[0100]映射到[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]而不是[0100],你想达到500%而不是400%

要达到此目的,您可以首先规格化滑块:

slider_n = (slider - 1) * (100/99);
(这将[1100]映射到[0100]),然后,如果需要,将指数的正值乘以(log5)/(log4),使刻度以500%结束,即

exp = (slider_n - 50) / 25.0;
if (exp > 0) exp = exp * Math.log(5)/Math.log(4);
scaling = Math.pow(2,exp);

我认为如果你提供指数拟合,对用户来说会更好

Javascript有Math.pow(a,b),它计算ab

如果将范围[0100]映射到[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]而不是[0100],你想达到500%而不是400%

要达到此目的,您可以首先规格化滑块:

slider_n = (slider - 1) * (100/99);
(这将[1100]映射到[0100]),然后,如果需要,将指数的正值乘以(log5)/(log4),使刻度以500%结束,即

exp = (slider_n - 50) / 25.0;
if (exp > 0) exp = exp * Math.log(5)/Math.log(4);
scaling = Math.pow(2,exp);