事件绑定以及传入距离参数
- 给指定元素绑定手指滑动三个阶段(touchStart,touchMove,touchEnd)的事件,使用transform的translate属性,根据滑动方向或距离移动元素。
<div
onTouchStart={(e) => touchStart(e)}
onTouchMove={(e) => touchMove(e)}
onTouchEnd={(e) => touchEnd(e)} style={{ transform: `translateX(${distance}px)` }}>
我是被滑动的元素
</div>
参数初始化以及事件处理
const [startX, setStartX] = useState(-1)
const [endX, setEndX] = useState(-1)
const [distance, setDistance] = useState(0)
const touchStart = (e: any) => {
setStartX(e.touches[0].clientX)
}
const touchMove = (e: any) => {
setEndX(e.touches[0].clientX)
let distance = (endX != -1) ? (-(startX - endX)) : 0;
Math.abs(distance) > 40 ? (setDistance(distance <= 0 ? -40 : 40)) : setDistance(distance)
}
const touchEnd = (e: any) => {
if (endX != -1 && Math.abs(startX - endX) > 40) {
endX > startX ? console.log('left') : console.log('right');
}
setStartX(-1)
setEndX(-1)
setDistance(0)
}