我有两个拇指的滑块。拇指可以沿着滑块(线)一直移动,这可以通过增加或减少它们来实现margin-left
,但是为了让它们移动,状态move
必须是true
,当每个拇指触发事件时都会发生onClickDown
。但是,如果事件onClickedUp
被触发,光标离开拇指或滑块的区域,move
设置为false
,这会使拇指停止移动。没关系,就是这个主意。
问题是光标可能比拇指的移动速度更快,如下面的 gif 所示,是什么使光标离开拇指区域并设置为 false,即使这不是用户想要的move
。
https://i.stack.imgur.com/hAXVP.gif
因此,为了使滑块正常工作,用户在移动拇指时必须格外小心,这是一个非常烦人的用户体验。
简而言之,我需要做的是确保光标不会比拇指移动得更快,无论我是否必须减慢光标或增加拇指的速度都没有关系。
我怎么能那样做?
这是我的代码和一些注释:
import React, { Fragment } from 'react'
import './Filter.css'
const Filter = props => {
const sliderRef = React.useRef() // => main parent div
const initial_position = 0
const end_position = 200
const initial_min_value = 5 // => Initial price
const initial_max_value = 1290 // => Final price
let [thumb1_position, setValueThumb1] = React.useState(0)
let [thumb2_position, setValueThumb2] = React.useState(0)
let [min_value, setMinValue] = React.useState(initial_min_value)
let [max_value, setMaxValue] = React.useState(initial_max_value)
let [move, setMove] = React.useState(false) // => Enable thumbs to move
// Ensure that the thumb_2 will be in the end of the slider at first
React.useEffect(() => {
setValueThumb2(sliderRef.current.offsetWidth - 5)
}, [])
// Here I get the position of the cursor within the element (slider) and move the thumbs based on it.
const handleChange = e => {
let thumb_class = e.target.className
var rect = sliderRef.current.getBoundingClientRect();
const current_position = e.clientX - rect.left; // X position within the element.
桃花长相依
相关分类