jQuery No Ui Slider,如何锁定多个互连的滑块以始终求和100
jQuery No-Ui-Slider, how to lock multiple interconnected sliders to always sum 100?
我在一些可能有3、4或5个滑块的页面中使用NoUiSlider(http://refreshless.com/nouislider/)。
我需要将滑块设置为总值限制为100,这样,如果我提高滑块的值,其他滑块应该降低一点,反之亦然,但我真的不知道如何做到。
有人能帮我吗?谢谢
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);
}
}
}
}
});
});
这是一把小提琴:
http://jsfiddle.net/vuQz5/11/
注意将MAX变量的值设置为所需值(所有滑块值的总和…
相关文章:
- 如何在php中的jquery中对循环内的选择框值求和
- 如何在jquery中使用实时计算求和值
- 正在获取JS Slider页码
- 尝试求和时,在我的表的页脚中返回$NaN
- 在键值对中对求和值进行下划线
- 如何按对象数组进行分组和求和
- 创建jQuery Slider的简单方法
- AngularJS-slider.noUiSlider不是函数
- -当在JQuery Slider上添加-webkit线性梯度时,moz线性梯度会被破坏
- 制作Easing Slider Start横幅取决于一周中的哪一天
- 如何使用jquery对货币格式的数字求和
- 求和变量,并不断显示和更新它
- 如何在JavaScript中使用此函数对范围内的所有数字求和
- jQuery根据相关复选框选择求和单元格
- Revolution Slider-适用于移动设备的懒虫图像
- 求和d3对象数组上的元素
- 对数组进行分组和求和
- jQuery Slider 滑得太远了一步
- javascript 在求和时返回 NaN
- jQuery No Ui Slider,如何锁定多个互连的滑块以始终求和100