Форум программистов, компьютерный форум, киберфорум
JavaScript: ReactJS
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.57/7: Рейтинг темы: голосов - 7, средняя оценка - 4.57
0 / 0 / 0
Регистрация: 16.02.2017
Сообщений: 41
1

Как начинать с того шага на котором остановились в input range?

29.04.2020, 22:06. Показов 1320. Ответов 5

Author24 — интернет-сервис помощи студентам
Добрый вечер, подскажите алгоритм сохранения шага в input range, чтобы при повторном движении у нас учитывался предыдущий шаг.
То есть если вести мышкой по высоте блока вверх или вниз у нас меняется шаг в input range и высчитывается коэффициент масштабирование в пределах от 1 до 3.
Формула не точная, но в проекте у меня она отрабатывает правильно, тут в примере я захардкодил.

Нужно, чтобы если вести мышкой повторно отсчет начинался с того места, на котором мы остановились изначально. Сейчас он дергается и начинается с того места куда мы кликнули. Спасибо!
HTML5
1
2
3
<div id="root">
    <!-- This element's contents will be replaced with your component. -->
</div>
CSS
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
.block {
  margin: 20px auto;
  width: 300px;
  height: 526px;
  background: rgba(0, 0, 0, .1);
  position: relative;
}
 
.circle {
  transform: translateY(50%);
  width: 200px;
  height: 200px;
  border: 3px solid yellow;
  border-radius: 50%;
  margin: 0 auto;
  position: relative;
}
 
.resize {
  position: absolute;
  bottom: -15px;
  right: 35%;
  width: 40px;
  height: 40px;
  background-color: red;
  cursor: move;
}
 
input {
  margin: 30px 200px;
}
Javascript
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
class App extends React.Component {
  state = {
    zoom: 3
  }
 
componentDidMount() {
    this.containerRef.addEventListener('mousemove', this.onMouseMove)
}
 
  onMouseDown = () => {
    this.isResized = true
    // не делайте акцент на цифры, это хардкод для показа
    this.onePercent = 5.26; // константа, высота блока 526px, то есть 1% = 5.26
    this.zoomPercent = 0.03; // константа, значение зума
    this.containerRef.addEventListener('mouseup', this.mouseup)
    this.containerRef.addEventListener('mouseleave', () => {
      this.isResized = false
    })
 
  }
  
  onMouseMove = (e) => {
    if (this.isResized) {
      console.log('current height', e.clientY)
      const height = e.clientY
      // здесь высчитывается коэффициент масштабирование в пределах от 1 до 3
      const zoom = height / this.onePercent * this.zoomPercent
      console.log('zoom', zoom)
      
      if (zoom < 1) {
         this.rangeRef.value = 1
      } else {
        this.rangeRef.value = zoom
      }
   }
  }
  
  mouseup = (e) => {
    this.isResized = false
    console.log('up', e)
  }
 
  render() {
    return (
      <div>
        <div className="block" ref={i => this.containerRef = i}>
          <div className="circle">
           <div className="resize"
            onMouseDown={this.onMouseDown}
           />
          </div>
        </div>
         <input
           readOnly
           type="range"
           value={this.state.zoom}
           step={0.1}
           min={1}
           max={3}
           ref={f => this.rangeRef = f}
          />
      </div>
    );
  }
}
 
 
ReactDOM.render(
    <App/>, document.getElementById('root')
);
https://codepen.io/FillPower/pen/oNjeGod
Нужно вести мышкой по красном квадрату)
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
29.04.2020, 22:06
Ответы с готовыми решениями:

Как приостановить потоки, чтобы потом они начали работать с того места, на котором остановились?
помогите пожалуйста!!! есть два потока, которые действуют одновременно. как их приостановить,...

Как исправить отображение input range в Mozilla?
Собственно, во всех браузерах кроме Mozilla отображается корректно, вот так ...

Input range js
Здравствуйте, пытаюсь сделать форму заказа, понадобился калькулятор в котором используется input...

Декоративный input range
Всем привет!) Подскажите, пожалуйста, как можно сделать input type=&quot;range&quot; вот такой формы?

5
dev - investigator
Эксперт JSЭксперт HTML/CSS
2151 / 1496 / 651
Регистрация: 16.04.2016
Сообщений: 3,696
29.04.2020, 22:43 2
FillPower,
каждый раз когда Вы запускаете событие mousemove, это происходит в районе квадрата, который видимо является ползунком и не двигается - он мал и это всегда близкие к друг другу значения. А градация зума существует лишь за счет height. Реализуйте ползунок.
Javascript
1
const height = e.clientY; // не сводим глаз отсюда, пока не начнет чесаться левая префронтальная доля :D
0
0 / 0 / 0
Регистрация: 16.02.2017
Сообщений: 41
29.04.2020, 22:47  [ТС] 3
Qwerty_Wasd, Я это понимаю, оттуда все начинается и при движении все статично как-будто из-за этого.
Но все равно я не знаю как решить задачу, поэтому обратился за помощью((
В моей задаче требуется высчитывать зум в пределах от 1-3, есть высота блока и от этой высоты я могу уменьшать/увеличивать ползунок
Но как сохранять предыдущий шаг я не знаю
0
dev - investigator
Эксперт JSЭксперт HTML/CSS
2151 / 1496 / 651
Регистрация: 16.04.2016
Сообщений: 3,696
29.04.2020, 22:56 4
FillPower, Еще раз обращаю Ваше внимание на
Цитата Сообщение от Qwerty_Wasd Посмотреть сообщение
Реализуйте ползунок.
Тот что с красным квадратом.
Тогда e.clientY всегда будет разным. Тогда и начинаться будет не
Цитата Сообщение от FillPower Посмотреть сообщение
оттуда
0
0 / 0 / 0
Регистрация: 16.02.2017
Сообщений: 41
30.04.2020, 10:13  [ТС] 5
Qwerty_Wasd, Не очень понятно, если вы про про input range, его в проекте не должно быть видно, мне нужно перетягивая мышкой по блоку изменять значения в нем. И при повторном перетягивании начинать с того же места.
Ползнука видно не должно быть.
0
dev - investigator
Эксперт JSЭксперт HTML/CSS
2151 / 1496 / 651
Регистрация: 16.04.2016
Сообщений: 3,696
30.04.2020, 12:27 6
FillPower, ползунка range не должно быть видно - это я понял еще при первом посещении песочницы. Я говорил про - скрин смотрим. Реализуйте перемещение квадрата по окружности и будет Вам счастье. Причина появления вашей темы в ветке - это не до конца реализованная задумка. Доделайте.
Миниатюры
Как начинать с того шага на котором остановились в input range?  
0
30.04.2020, 12:27
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
30.04.2020, 12:27
Помогаю со студенческими работами здесь

Input range кнопки + -
Здравствуйте. Подскажите пожалуйста, как сделать кнопки + - для ползунка, чтобы при нажатии он...

Input signal out of range
Здравствуйте! изменил разрешение экрана. после перезагрузки случилось следующее: 1) идет заставка...

Как сохранить введеные пользователям данные из input в переменную после того, как пользователь нажмет кнопку
Пользователь вводит данные в input и после того, как нажимает на кнопку, эти данные сохраняются в...

CSS в input type=range
Всем привет! Нашла такой стиль для &lt;input type=&quot;range&quot;&gt; Только вот проблема в том, что ползунок...

Стилизация ползунка input type=range
Здравствуйте! Подскажите, пожалуйста, возможно ли вообще при стилизации ползунка фоном вставить...

Не работает функция с input type range
Всем привет! Помогите пжл разобраться почему не работает функция Необходимо чтобы от значения...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
6
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru