首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >noUiSlider:创建多个

noUiSlider:创建多个
EN

Stack Overflow用户
提问于 2015-07-16 20:12:04
回答 3查看 8.3K关注 0票数 10

我在表单上使用noUiSlider (http://refreshless.com/nouislider/),表单上将有几十个滑块。与其复制/粘贴每个代码,我还以为我可以设置一个类名数组和一个循环。那是有效的;它设置工作滑块。然而,表单还必须在更新时显示滑块的值,这是我无法计算的部分。我知道如何用静态值来做这件事,但在循环中不知道.

简化示例:

JavaScript:

代码语言:javascript
复制
var steps = [
    'Never',
    'Occasionally',
    'Frequently',
    'Constant'
];
// This array will have many more
var slider_names = [
    'slider',
    'slider2'
];
var sliders = [];

for (var i = 0; i < slider_names.length; i++) {
    sliders.push(document.getElementById(slider_names[i]));
    noUiSlider.create(sliders[i], {
        start: 0,
        connect: 'lower',
        step: 1,
        range: {
            'min': [ 0 ],
            'max': [ 3 ]
        },
        pips: {
            mode: 'steps',
            density: 100
        }
    });
    sliders[i].noUiSlider.on('update', function(values, handle) {
// ***** Problem line *****
        document.getElementById(slider_names[i]+'-value').innerHTML = steps[parseInt(values[handle])];
// ***** Problem line *****
    });
}

HTML:

代码语言:javascript
复制
<div id="slider-value"></div>
<div id="slider"></div>
<div id="slider2-value"></div>
<div id="slider2"></div>  (etc...)

问题线在上面突出显示..。当使用静态值(例如,‘slder2-value’)时,它工作得很好,但当update事件触发时,我似乎找不出如何针对适当的id .slider_namesi显然不会在那里工作。我可能漏掉了什么明显的东西?谢谢!

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2015-08-12 15:30:51

我今天也无意中遇到了同样的问题,我使用了以下代码。

基本上,我只是将滑块的所有值发送到这个函数中,然后将所有结果推入一个数组中,然后我可以处理想要处理的数据数组。

希望这也能对你有所帮助。

代码语言:javascript
复制
var sliders = document.getElementsByClassName('sliders');

for ( var i = 0; i < sliders.length; i++ ) {

    noUiSlider.create(sliders[i], {
        start: 50,
        step: 5,
        connect: "lower",
        orientation: "horizontal",
        range: {
            'min': 0,
            'max': 100
        },
    });

    sliders[i].noUiSlider.on('slide', addValues);
}

function addValues(){
    var allValues = [];

    for (var i = 0; i < sliders.length; i++) {
        console.log(allValues.push(sliders[i].noUiSlider.get()));
    };

    console.log(allValues);
}
票数 14
EN

Stack Overflow用户

发布于 2016-10-20 19:53:00

下面是一个工作模型,它允许您在同一个页面上拥有多个noUiSliders和滑块值。

以下是3个滑块的html。你可以随心所欲地包括多少人。

代码语言:javascript
复制
    <div class="slider"></div>
    <div class="value">0</div>

    <div class="slider"></div>
    <div class="value">0</div>

    <div class="slider"></div>
    <div class="value">0</div>

这里是javascript,它将创建滑块,并在移动滑块时向相应的滑块添加正确的值。

代码语言:javascript
复制
    $(function () {
    var sliders = document.getElementsByClassName('slider');
    var slideval = document.getElementsByClassName('value');

    for (var i = 0; i < sliders.length; i++) {
        noUiSlider.create(sliders[i], {
            start: 0,
            connect: [true, false],
            range: {
                'min': 0,
                '10%': 1,
                '20%': 2,
                '30%': 3,
                '40%': 4,
                '50%': 5,
                '60%': 6,
                '70%': 7,
                '80%': 8,
                '90%': 9,
                'max': 10
            },
            snap: true,
        });


        sliders[i].noUiSlider.on('slide', function () {
            var allValues = [];
            for (var i = 0; i < sliders.length; i++) {

                // store values in array to pass through ajax...
                allValues.push(sliders[i].noUiSlider.get());

                // assign the slider value to the corresponding noUiSlider
                slideval[i].innerHTML = sliders[i].noUiSlider.get();
            };
        });
    }
});
票数 0
EN

Stack Overflow用户

发布于 2016-12-22 09:53:13

这个方法很有效:

代码语言:javascript
复制
var sliders = document.getElementsByClassName('sliders');

for ( var i = 0; i < sliders.length; i++ ) {

    noUiSlider.create(sliders[i], {
        start: 10,
        step: 1,
        connect: "lower",
        orientation: "horizontal",
        range: {
            'min': 0,
            'max': 100
        },
    });

    sliders[i].noUiSlider.on('slide', addValues);
}

function addValues(){
    var allValues = [];

    for (var i = 0; i < sliders.length; i++) {
        allValues.push(sliders[i].noUiSlider.get());
    };
    
    for (var j = 0; j < allValues.length; j++) {
    document.getElementsByClassName('slider-value')[j].innerHTML = allValues[j];
    }

}
代码语言:javascript
复制
<div class="slider-value"></div>
<div class="sliders"></div>
<div class="slider-value"></div>
<div class="sliders"></div>
<div class="slider-value"></div>
<div class="sliders"></div>
<div class="slider-value"></div>
<div class="sliders"></div>

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/31463659

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档