我一直在尝试创建4个输入类型范围,所有这4个范围的总和为100。例如:
Range 1 : 20%
Range 2 : 20%
Range 3 : 20%
Range 4 : 40%
如果我将范围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/,如果你拖动范围太快,或者点击范围的线条,它就不起作用了。
3条答案
按热度按时间hc8w905p1#
我认为计算当前滑块上的差值,然后将该差值应用到前一个滑块上会更容易。
然后,您必须处理前一个滑块是否超出界限(低于0或超过100)。
https://jsfiddle.net/htd8x2jz/1/
我恐怕这不是最干净的失败到下一个滑块的解决方案,它应该是一个循环遍历数组直到返回应该更新的滑块的方法,但是jsfidle应该足够让你走上这条路。
就我个人而言,我建议所有其他滑块调整时,拖动一个,你所描述的方式将使它很难设置他们都为25%,例如.我很感激这不是你的问题,但我想我会提到它.
u59ebvdq2#
我没有测试过这段代码,但是你可以有解决你的问题的基本思路。此外,你只需要记住以前移动的滑块,你必须记住所有的滑块在以前移动的顺序。
这是小提琴。
92dk7w1h3#
此代码创建两个表,每个表中有两个范围输入和两个数字输入。范围输入和数字输入是链接的,这意味着更改其中一个的值将更新另一个的值。此代码还显示每个表中范围输入值的合计。
要创建范围输入和数字输入,代码使用HTML“input”元素,并将“type”属性设置为“range”或“number”。还为每个input元素设置了“value”、“min”和“max”属性。
当范围输入的值更改时,使用“oninput”事件调用JavaScript函数“updateTotalTable1”和“updateTotalTable2”。这些函数通过循环范围输入并将其值相加来计算每个表中范围输入值的总和。然后,总和显示在具有相应“id”的“span”元素中。
“updateInputNumber”和“updateRangeInput”函数在数字输入的值更改时调用,也使用“oninput”事件。这些函数分别更新相应的范围输入或数字输入的值。
代码中的CSS将表格和输入设置为占页面宽度的50%并居中,范围输入的宽度为100%。
最后,代码调用“updateTotalTable1”和“updateTotalTable2”函数以在页面加载时初始化总计显示。
超文本:
CSS:
联森: