Я пытаюсь создать несколько слайдеров, которые взаимосвязаны. Все ползунки должны всегда давать сумму 100. Таким образом, если Slider 1 = 50, Slider 2 и 3 должны быть установлены на 25 автоматически.Несколько подключенных/зависимых слайдеров с Dojo
код работает до сих пор с некоторыми ограничениями: Я не могу манипулировать ползунки жить (intermediateChange: истина) и ползунки не двигаются больше, когда один из них достиг 100 и так отстой получил 0.
Вот мой код:
<script>
require(["dijit/form/HorizontalSlider"], function(HorizontalSlider) {
var slider1 = new HorizontalSlider({
minimum: 0,
maximum: 100,
value: 10,
intermediateChanges: false,
onChange: function() {
console.log("Slider 1: " + slider1.get('value'));
var residue = slider2.get('value') + slider3.get('value')
slider2.set('value', (slider2.get('value')/residue) * (100 - slider1.get('value')));
slider3.set('value', (slider3.get('value')/residue) * (100 - slider1.get('value')));
}
}, "slider1");
var slider2 = new HorizontalSlider({
minimum: 0,
maximum: 100,
value: 45,
intermediateChanges: false,
onChange: function() {
console.log("Slider 2: " + slider2.get('value'));
var residue = slider1.get('value') + slider3.get('value')
slider1.set('value', (slider1.get('value')/residue) * (100 - slider2.get('value')));
slider3.set('value', (slider3.get('value')/residue) * (100 - slider2.get('value')));
}
}, "slider2");
var slider3 = new HorizontalSlider({
minimum: 0,
maximum: 100,
value: 45,
intermediateChanges: false,
onChange: function() {
console.log("Slider 3: " + slider3.get('value'));
var residue = slider1.get('value') + slider2.get('value')
slider1.set('value', (slider1.get('value')/residue) * (100 - slider3.get('value')));
slider2.set('value', (slider2.get('value')/residue) * (100 - slider3.get('value')));
}
}, "slider3");
slider1.startup();
slider2.startup();
slider3.startup();
});
</script>
Как добиться того, чтобы слайдеры поддерживали связь, даже если один был установлен максимум? Есть ли более разумное решение? Таким образом, код становится длиннее с каждым дополнительным слайдером ...
Я думаю, вам нужно использовать ** публикация/подписка ** модуль додзё, который поможет вам начать автоматическое манипулирование слайдера. Логика была бы такой. Изменение в любом из слайдера опубликует значение вместе с именем ползунка, вызвавшим изменение. Другие слайдеры, которые подписались, получат значения и изменят свое значение в зависимости от желаемой вами бизнес-логики. – frank