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

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

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

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

И вот вопрос. Как мне иметь слайдеры (input type =''range') с равным диапазоном мин и макс, но ещё как-то сделать некое свойство limit, которое можно будет по условию применять и ограничивать движение слайдера?
  • Вопрос задан
  • 1384 просмотра
Подписаться 1 Средний Комментировать
Помогут разобраться в теме Все курсы
  • Яндекс Практикум
    Мидл фронтенд-разработчик
    5 месяцев
    Далее
  • Javascript.ru
    Курс по React
    5 недель
    Далее
  • Нетология
    Fullstack-разработчик на Python + нейросети
    20 месяцев
    Далее
Решения вопроса 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
('•')
Если разобраться, то можно понять.

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

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

Похожие вопросы
ITK academy Нижний Новгород
от 50 000 до 90 000 ₽
IT ATLAS Москва
от 200 000 до 250 000 ₽
ITK academy Казань
от 50 000 до 90 000 ₽