Задать вопрос
@jakut_bmstu

Как ограничить сумму нескольких input[type="range"]?

Нужно сделать компонент из слайдеров, содержащий несколько слайдеров, сумма значений которых должна быть ограничена:

612233a2cb54d245193930.jpeg
То есть, когда у меня допустим два слайдера равны по 50%, то остальные двигать нельзя.
Если один из слайдеров я передвинул на 40%, то первый я могу сдвинуть до 60%, или остальные два сдвинуть на 5% каждый, или один на 10 или как-то по другому, но суммарно на 10.

И вот вопрос. Как мне иметь слайдеры (input type =''range') с равным диапазоном мин и макс, но ещё как-то сделать некое свойство limit, которое можно будет по условию применять и ограничивать движение слайдера?
  • Вопрос задан
  • 1376 просмотров
Подписаться 1 Средний Комментировать
Решения вопроса 1
0xD34F
@0xD34F Куратор тега React
Компонент получает через props массив текущих значений и максимально допустимую сумму. Когда пользователь пытается изменить какое-либо из значений, собирается новый массив значений, считается его сумма. Если сумма не превышает максимально допустимую - новый массив значений отдаётся в родительский компонент.

function Ranges(props) {
  const onChange = ({ target: t }) => {
    const index = +t.dataset.index;
    const value = +t.value;
    const values = props.values.map((n, i) => i === index ? value : n);

    if (props.max >= values.reduce((acc, n) => acc + n, 0)) {
      props.onChange(values);
    }
  };

  return (
    <div>
      {props.values.map((n, i) => (
        <div>
          <input
            type="range"
            data-index={i}
            max={props.max}
            value={n}
            onChange={onChange}
          />
          {n}
        </div>
      ))}
    </div>
  );
}

https://jsfiddle.net/cx16nhqe/
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
hahenty
@hahenty
('•')
Если разобраться, то можно понять.

Функцию балансировки можно свою, которая будет блокировать изменения по требуемым условиям.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы