javascript - noUiSlider 将点数转换为对数外观

标签 javascript jquery html nouislider

我有几个noUiSliders就像下面的例子。我想将数字 pip 和 slider 值更改为对数外观。因此,对于下面的示例,我希望中间值为 1000 万(而不是 5000 万)。所以例如之间的步骤100.000 到 250.000 小于 2300 万到 3000 万之间。像这样:

|----|----|----|----|----|--------|--------|--- --------------|------------|
0 7Mio 10Mio 25Mio 100Mio

我也查看了 noUiSlider-Website 和其他网站,但我没有找到如何启动它的方法。所以我想请你帮忙解决这个问题。预先感谢您阅读我的问题。

//format the pips
function filterPips(value, type) {
  if (type === 0) {
    return value < 2000 ? -1 : 0;
  }
return value % 1000 ? 2 : 1;
}

var rangeSliderGehalt = document.getElementById('slider-range-gehalt');

noUiSlider.create(rangeSliderGehalt, {
    start: [100000],
    connect: [true, false],
    step: 100000,
    behaviour: 'tap-drag',
    tooltips: true,
    range: {
        'min': [0],
        'max': [100000000]
    },
    pips: {
        mode: 'positions',
        values: [0, 25, 50, 75, 100],
        density: 4,
        stepped: true,
        filter: filterPips,
        format: wNumb({
            decimals: 0,
            thousand: '.',
            postfix: ' €'
        })
    },
    format: wNumb({
        decimals: 0, // default is 2
        thousand: '.', // thousand delimiter
        postfix: ' €', // gets appended after the number
    })
});
var rangeSliderGehaltValueElement = document.getElementById('result-gehalt');

rangeSliderGehalt.noUiSlider.on('update', function (values, handle) {
    rangeSliderGehaltValueElement.innerHTML = values[handle];
});

var valueInput = document.getElementById('value-input'),
    valueSpan = document.getElementById('value-span');

// When the slider value changes, update the input and span
rangeSliderGehalt.noUiSlider.on('update', function (values, handle) {
    if (handle) {
        valueInput.value = values[handle];
    } else {
        //valueSpan.innerHTML = values[handle];
    }
});

// When the input changes, set the slider value
if (valueInput) {
    valueInput.addEventListener('change', function () {
        rangeSliderGehalt.noUiSlider.set([null, this.value]);
    });
}
.label{
  margin-top:50px;
}

.slider{
  padding:50px;
}
<link rel="stylesheet"href="https://cdnjs.cloudflare.com/ajax/libs/noUiSlider/11.1.0/nouislider.min.css"/>
<script src="https://code.jquery.com/jquery-3.2.1.min.js" integrity="sha256-hwg4gsxgFZhOsEEamdOYGBf13FyQuiTwlAQgxVSNgt4=" crossorigin="anonymous"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/noUiSlider/11.1.0/nouislider.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/wnumb/1.1.0/wNumb.min.js"></script>


<div class="slider">
  <div id="slider-range-gehalt"></div>
</div>

<div class="label">
  <label for="gf">Slider value: </label>
  <span id="result-gehalt"></span>
</div>

最佳答案

显然我无法查看 noUiSliders 的文档。我太专注于那个特定的“对数的东西”以至于我忘了检查“非线性”。但是,解决方案是,只告诉范围什么值以及您希望在 slider 的多少百分比处有什么步骤。

解决方案链接:https://refreshless.com/nouislider/slider-values/

所以我只是更改了代码:

range: {
        'min': [0, 50000], //stepsize is 50.000
        '5%': [500000, 100000], //stepsize is 100.000
        '25%': [7000000],
        '50%': [10000000],
        '75%': [60000000, 500000], //stepsize is 500.000
        'max': [100000000]
    },

非常感谢那些遇到的人。

关于javascript - noUiSlider 将点数转换为对数外观,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52506235/

相关文章:

javascript - 如何使用jquery使用变量隐藏html中的项目

jquery - 将图像叠加在另一个图像上并将它们保留在背景中

javascript - 样式下拉菜单

javascript - jQuery - 在 highcharts div 上动态添加按钮

单击时的 Javascript 排序表列

javascript - Shadowbox 的 buildObject() 方法在哪里?

jquery - 我可以像数据库记录一样将自定义属性存储在 HTML DOM 中吗?

html - 防止从错误的元素触发的悬停效果

javascript - 如何使用 JavaScript 访问 html 元素中的数据

javascript - 如何使用 JS 或 JQuery 对表格进行滚动加载?