@luxurypluxury

Почему не работает range slider?

Почему-то не двигается рендж, вроде из-за value, но почему так?
https://stackblitz.com/edit/react-ts-geehnt?file=A...
  • Вопрос задан
  • 210 просмотров
Пригласить эксперта
Ответы на вопрос 2
neuotq
@neuotq
Прокрастинация
Главная причина в том, что вы отключили pointer events для него в CSS (у range.input : pointer-events: none;).
Далее, в value вы отправляете просто константу, более того куда и как он будет обновлять значения?

Обновим немного код, добавив состояния, чтобы потом можно было легко использовать значения в дальнейшей логике.
import * as React from 'react';
import styles from './style.module.scss';

export default function App() {
  // состояние для левого
  const [leftVal, setLeftVal] = React.useState(2500);
  // состояние для правого
  const [rightVal, setRightVal] = React.useState(7500);
  //  Константы для ограничения макс и минимального значения
  const MINVAL = 0;
  const MAXVAL = 10000;
  return (
    <div className={styles.main}>
      <div className={styles.slider}>
        <div className={styles.slider__progress} />
      </div>
      <div className={styles.range}>
        <input
          type="range"
          name="range-min"
          min={MINVAL}
          max={MAXVAL}
          value={leftVal}
          onChange={(e) => setLeftVal(parseInt(e.target.value))}
        />
        <input
          type="range"
          name="range-max"
          min={MINVAL}
          max={MAXVAL}
          value={rightVal}
          onChange={(e) => setRightVal(parseInt(e.target.value))}
        />
      </div>
    </div>
  );
}


Далее, у вас теперь будет работать только последний(по порядку в коде html/jsx ), тк он будет "наверху" и события мышки просто не могут достучаться до второго. Более того, логика работы нарушается, например он может быть меньше своего левого брата, что не ок. Ну и ещё МНОГО подводных камней. Вся проблема в том, что сам стандартный элемент input range поддерживает только одно значение, а вам нужно да. Логика испольнения этого не то чтобы сложна, но таки не совсем тривиально, нужно немного поработать.

Вот ссылка, можете изучить пример если идти по вашему пути.
Либо как это делают через другие html элементы(условно на div), эмулируя порведение.

На мой взгляд гибое дело с этим возиться, если у вас только не личный интерес поиграться. Если для дела - то берите готовую библиотеку + во всех(или почти всех) UI библиотека он тем или другим способом реализован.
Ответ написан
Комментировать
@luxurypluxury Автор вопроса
Вот обновлённый вариант с библиотекой, но слайдер так же не работает https://stackblitz.com/edit/react-ts-geehnt?file=A...
Ответ написан
Комментировать
Ваш ответ на вопрос

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

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