I have a range input field with a numeric value that changes when dragging:

When I drag all the way to the right, the maximum input value increases. Then, when I release (onMouseUp or onTouchEnd), the maximum value decreases, so I can drag further and continue to increase max by dragging:

When I drag all the way to the left, the minimum input value decreases. Then, when I release (onMouseUp or onTouchEnd), the min value increases, so I can drag further and continue to decrease min by dragging:

I should always have a range of 99. For example, if I increased the maximum value to 530, the minimum value would be 431.
Problem:
I have two recursive setTimeout for changing the values ββof min and max .
When the user first drags all the way in any direction, this number should slowly change. If they hold it for 2 seconds, the number should increase faster. Relevant Code:
// After arbitrary period, increase the rate at which the max value increments this.fasterChangeStake = setTimeout(() => { this.stakeChangeTimeout = this.FAST_STAKE_CHANGE_TIMEOUT; }, 2000);
This works for the first time. But in subsequent moments, he first lingers on a faster timeout:

This is despite the fact that I ended the timeouts when the drag and drop ended:
clearTimeout(this.increaseStakeLimits); clearTimeout(this.decreaseStakeLimits); clearTimeout(this.timer);
Why is the first (slower) timeout not involved?
Codepen: https://codepen.io/alanbuchanan/pen/NgjKMa?editors=0010
JS:
const {observable, action} = mobx const {observer} = mobxReact const {Component} = React @observer class InputRange extends Component { constructor() { super(); this.INITIAL_STAKE_CHANGE_TIMEOUT = 200; this.FAST_STAKE_CHANGE_TIMEOUT = 20; this.SNAP_PERCENT = 10; this.increaseStakeLimits = this.increaseStakeLimits.bind(this); this.decreaseStakeLimits = this.decreaseStakeLimits.bind(this); } @observable min = 0; @observable max = 99; @observable stakeChangeTimeout = this.INITIAL_STAKE_CHANGE_TIMEOUT; @observable isIncreasing = false; @observable isDecreasing = false; @observable stake = 0; @action updateStake = (amount) => { if (amount > -1) { this.stake = amount } }; increaseStakeLimits() { const { updateStake } = this; this.max = this.max += 1; this.min = this.max - 99 updateStake(this.max);