javascript - jQuery No-Ui-Slider,如何锁定多个互连的 slider 总和为 100?

标签 javascript jquery jquery-slider

我在某些可能有 3、4 或 5 个 slider 的页面中使用 NoUiSlider ( http://refreshless.com/nouislider/ )。

我需要将 slider 的总值设置为 100,这样如果我提高 slider 的值,其他 slider 的值应该降低一点,反之亦然,但我真的不知道如何去做这件事。

有人可以帮我吗?谢谢!

jQuery 代码:

$(".slider.tied").each(function() {
    var context = $(this).addClass("noUiSlider");
    var input = context.prev(".amount"); // the input containing the actual slider value
    var val = input.val();
    var min = input.data("min");
    var max = input.data("max");

    context.noUiSlider({
        range: [min, max],
        start: val,
        step: 1,
        handles: 1,
        slide: function() {
            var value = $(this).val();
            input.val(value);
        }
    });
});

最佳答案

可能的解决方案:

var init = true;
var elements = $(".multislider").children(".slider.tied").length;
var MAX = 100;
var initValue = (MAX / elements) >> 0;
var InitMod = MAX % elements;

$(".slider.tied").each(function() {
    var slidersTied = $(".slider.tied");
    var context = $(this);

    var input = context.prev(".amount");
    var val = input.data('answer');
    var min = input.data('min');
    var max = input.data('max');
    var range = 1;
    var proceed = false;

    $(this).empty().slider({
        value: val,
        min: min,
        max: max,
        range: range,
        animate: "slow",
        create: function(event, ui){

            if (InitMod > 0) {
                $(this).slider('value', initValue + 1);
                $(this).prev('.amount').val(initValue + 1);
                InitMod = InitMod - 1;
            }
            else
            {
                $(this).slider('value', initValue);
                $(this).prev('.amount').val(initValue);
            }

        },
        slide: function(e, ui) {

            // Update display to current value
            $(this).prev('.amount').val(ui.value);

            var current = ($(this).index() / 2) >> 0;
            var total = 0;
            var counter = 0

            slidersTied.not(this).each(function() {

                total += $(this).slider("option", "value");                
                counter += 1;
            });

            total += ui.value;

            if (total != MAX){
                proceed = true;
            }

            var missing = MAX - total;
            console.log("missing: " + missing);

            counter = 0;

            if(proceed) {

                //load elements array
                var elements = [];

                slidersTied.each(function() {
                    elements[counter] = $(this);
                    counter += 1;
                });

                var endIndex = counter - 1;
                counter = endIndex + 1;

                while (missing != 0) {

                    console.log("current counter: " + counter);
                    do {
                        if (counter == 0) 
                        {
                            counter = endIndex;
                        }
                        else
                        {
                            counter = counter - 1;
                        }
                    } while(counter == current)

                    console.log("elemento attuale: " + counter);

                    var value = elements[counter].slider("option", "value");
                    var result = value + missing;

                    if (result >= 0) 
                    {
                        elements[counter].slider('value', result);
                        elements[counter].prev('.amount').val(result);

                        missing = 0;    
                    }
                    else
                    {
                        missing = result;
                        elements[counter].slider('value', 0);
                        elements[counter].prev('.amount').val(0);
                    }

                }

            }

        }
    });
});

这是一个 fiddle :

http://jsfiddle.net/vuQz5/11/

注意将 MAX 变量的值设置为所需值(所有 slider 值的总和...

关于javascript - jQuery No-Ui-Slider,如何锁定多个互连的 slider 总和为 100?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17923265/

相关文章:

javascript - 自定义渲染单元格数据网格 Material UI 的自定义排序

javascript - 登录成功后获取cookie?

javascript - $ ("#slider_range").slider 不是函数

javascript - jQuery slider 在 Chrome 上不起作用(有间隔)

jquery - 在 Bootstrap 弹出窗口中嵌入 jQuery slider

javascript - 如何让我的浏览器在不刷新的情况下显示更改?

javascript - 将 XPath 表达式与 javascript 变量进行匹配

jquery - 对所有 Web 浏览器使用 keydown

javascript - 拖放后 TinyMCE 编辑器内容丢失

javascript - 如何自动扩展从输入字段过滤的AngularJS数据?