Javascript - 带非线性刻度的负十进制输入范围
Javascript - negative decimal input range with non-linear scale
我有一个输入范围滑块,范围从 -1000 到 1000。
<input type="range" min="-1000" max="1000" value="0" />
我希望步长是非线性的(log 或 exp),在较低范围内具有更高的精度。
例如
-1000
-999.5
-998
-996
...
0
100
300
600
1000
并不完全需要如上所示,但我只是希望台阶在较低范围内靠得更近,在较高范围内分开得更远。正在寻找一些 jQuery/JS 代码来帮助我完成此任务。
谢谢!
可以从上面的方法入手:
html 部分:
<input id='digits' type="range" min="-1000" max="1000" value="0" step="100" />
js 部分:
$("#digits").on("input change", function() {
var is_negative = this.step < 0;
this.step = (is_negative)? (Math.abs(this.step) / 1.025).toFixed(0) : Math.pow(Math.abs(this.step), 1.025).toFixed(0);
});
这不是一个正确的决定,它只是适合您的情况的正确方向
您不能直接将step
设置为函数。但是你可以把它输出到一些div。例如:
<input id="range" name="range" type="range" min="-1000" max="1000" value="-1000" />
<output id="rangeOutput" for="range" name="level">-1000</output>
并且在 onInput
上,事件 step
由适当的函数计算,在我的示例中 - 二次函数:
var stepFunction = function(step, min, max){
var range = max - min,
coeff = Math.pow((step - min)/range, 2),
newStep = min + coeff*range;
return newStep;
}
$('#range').on('input', function(e){
var target = e.target,
step = parseInt(target.value),
min = parseInt(target.min),
max = parseInt(target.max);
$('#rangeOutput').val(stepFunction(step, min, max));
});
我有一个输入范围滑块,范围从 -1000 到 1000。
<input type="range" min="-1000" max="1000" value="0" />
我希望步长是非线性的(log 或 exp),在较低范围内具有更高的精度。
例如
-1000
-999.5
-998
-996
...
0
100
300
600
1000
并不完全需要如上所示,但我只是希望台阶在较低范围内靠得更近,在较高范围内分开得更远。正在寻找一些 jQuery/JS 代码来帮助我完成此任务。
谢谢!
可以从上面的方法入手:
html 部分:
<input id='digits' type="range" min="-1000" max="1000" value="0" step="100" />
js 部分:
$("#digits").on("input change", function() {
var is_negative = this.step < 0;
this.step = (is_negative)? (Math.abs(this.step) / 1.025).toFixed(0) : Math.pow(Math.abs(this.step), 1.025).toFixed(0);
});
这不是一个正确的决定,它只是适合您的情况的正确方向
您不能直接将step
设置为函数。但是你可以把它输出到一些div。例如:
<input id="range" name="range" type="range" min="-1000" max="1000" value="-1000" />
<output id="rangeOutput" for="range" name="level">-1000</output>
并且在 onInput
上,事件 step
由适当的函数计算,在我的示例中 - 二次函数:
var stepFunction = function(step, min, max){
var range = max - min,
coeff = Math.pow((step - min)/range, 2),
newStep = min + coeff*range;
return newStep;
}
$('#range').on('input', function(e){
var target = e.target,
step = parseInt(target.value),
min = parseInt(target.min),
max = parseInt(target.max);
$('#rangeOutput').val(stepFunction(step, min, max));
});