【发布时间】:2018-12-04 03:06:05
【问题描述】:
我一直在尝试创建 4 个输入类型范围,所有这些 (4) 的总和为 100。例如:
Range 1 : 20%
Range 2 : 20%
Range 3 : 20%
Range 4 : 40%
如果我将 Range 4 的值拖到 50%,我希望得到以下结果:
Range 1 : 20%
Range 2 : 20%
Range 3 : 10% (last/previous range that was dragged)
Range 4 : 50%
一般概念:
我有一个包含所有类型范围的 id 的数组。这个数组是在页面加载时创建的 - 所以当页面加载时,数组看起来像这样:
["fitness-range","social-range","gourmet-range","street-range"]
代码:
var current_total_percentage = 0; // To have the total percentage
var slider_indexes = []; // The array which holds the id's of type ranges
// Loop each type range and add it's value to the total percentage
jQuery('input[type=range]').each(function (index, value) {
current_total_percentage += parseInt(jQuery(this).val());
slider_indexes.push(jQuery(this).attr("id")); // Add the id to the array
});
每次拖动输入范围时,我都会将其 ID 移动到该数组的第一个位置,以了解最后拖动了哪个范围 => 这意味着如果增加或减少另一个范围,则最后一个范围应该更改值。
移动功能:
arraymove(slider_indexes, slider_indexes.indexOf(jQuery(this).attr("id")), 0);
function arraymove(arr, fromIndex, toIndex) {
var element = arr[fromIndex];
arr.splice(fromIndex, 1);
arr.splice(toIndex, 0, element);
}
我已经尝试了很多东西,但要让它发挥作用非常具有挑战性,所以任何提示都将不胜感激。
注意事项:
1) 范围值更改 10 的步长。这意味着每次更改范围值时都会变为 +10 或 -10。
2) 减小范围时,我想将最后拖动的范围减小/增加 10,以便始终保持 100%。
3) 如果一个范围被拖动到 100%,则所有其他范围必须变为 0%,即出现在数组中的同一行。
编辑 1:我的解决方案直到现在 -> https://jsfiddle.net/7q569ugo/10/ ,如果您将范围拖动得太快,或者单击范围的行,它将不起作用。
【问题讨论】:
-
请提供您的 Range Change 事件代码
-
@umer 添加了我的代码的 jsfiddle 版本,该版本可以工作但仍需要 mods
标签: javascript jquery html input-type-range