Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/68.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 生成轴比例_Javascript_Jquery - Fatal编程技术网

Javascript 生成轴比例

Javascript 生成轴比例,javascript,jquery,Javascript,Jquery,我正在做一个项目,我需要计算一些滑块的比例。用户可以定义最小值、最大值和步长。 您可以在下面找到代码: var j = Math.round(cfg.max / cfg.step); var l = (containerWidth / (j - 1)); for (var i = 0; i < j; i++) { s.push('<span style="left:'); s.push(l * i); s.push('px">'); s.push(cfg.ste

我正在做一个项目,我需要计算一些滑块的比例。用户可以定义最小值、最大值和步长。 您可以在下面找到代码:

var j = Math.round(cfg.max / cfg.step);
var l = (containerWidth / (j - 1));
for (var i = 0; i < j; i++) {
  s.push('<span style="left:');
  s.push(l * i);
  s.push('px">');
  s.push(cfg.step * (i + 1));
  s.push('</span>');
}

Example: min=1 max=12 step=3
Generated scale: 3  6  9  12
Slider ticks:    1 4 7 10 12
var j=Math.round(cfg.max/cfg.step);
var l=(集装箱宽度/(j-1));
对于(变量i=0;i

我想知道如何为滑块生成刻度。

假设您的问题可以这样重新表述:

使用最小x和最大y为任意范围计算n个刻度

然后我们可以调整:

这里很难找到一个最佳的解决方案,但我认为D3方法做得比较好——在我看来,我宁愿选择范围
1-12
的刻度
2,4,6,8,10,12
,而不是你建议的刻度
1,4,7,10,12


工作小提琴:

假设你的问题可以这样重新表述:

使用最小x和最大y为任意范围计算n个刻度

然后我们可以调整:

这里很难找到一个最佳的解决方案,但我认为D3方法做得比较好——在我看来,我宁愿选择范围
1-12
的刻度
2,4,6,8,10,12
,而不是你建议的刻度
1,4,7,10,12


工作小提琴:

嗨,我不明白问题是什么,在屏幕上画记号还是计算记号?你的问题是“计算任意范围内的n个等距整数记号,其中最小x和最大y,其中x和y是整数”?嗨,我不明白问题是什么,在屏幕上绘制记号或计算记号?您的问题是“计算任意范围内最小x和最大y的n个等距整数记号,其中x和y是整数”?有一个定义的var
x
未使用。除此之外,它非常棒。谢谢@claudiomedina-已修复。:)有一个定义的var
x
未使用。除此之外,它非常棒。谢谢@claudiomedina-已修复。:)
function calculateTicks(min, max, tickCount) {
    var span = max - min,
        step = Math.pow(10, Math.floor(Math.log(span / tickCount) / Math.LN10)),
        err = tickCount / span * step;

    // Filter ticks to get closer to the desired count.
    if (err <= .15) step *= 10;
    else if (err <= .35) step *= 5;
    else if (err <= .75) step *= 2;

    // Round start and stop values to step interval.
    var tstart = Math.ceil(min / step) * step,
        tstop = Math.floor(max / step) * step + step * .5,
        ticks = [];

    // now generate ticks
    for (i=tstart; i < tstop; i += step) {
        ticks.push(i);  
    } 
    return ticks;
}
calculateTicks(1, 12, 5); // [2, 4, 6, 8, 10, 12]
calculateTicks(0, 12, 4); // [0, 5, 10]