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

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

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

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

И вот вопрос. Как мне иметь слайдеры (input type =''range') с равным диапазоном мин и макс, но ещё как-то сделать некое свойство limit, которое можно будет по условию применять и ограничивать движение слайдера?
  • Вопрос задан
  • 1383 просмотра
Подписаться 1 Средний Комментировать
Помогут разобраться в теме Все курсы
  • Яндекс Практикум
    Мидл фронтенд-разработчик
    5 месяцев
    Далее
  • Яндекс Практикум
    React-разработчик
    3 месяца
    Далее
  • Яндекс Практикум
    Фронтенд-разработчик
    10 месяцев
    Далее
Решения вопроса 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 Нижний Новгород
от 80 000 до 120 000 ₽
ITK academy Воронеж
от 50 000 до 90 000 ₽