[英]React JS swipe functionality not working as expected
我正在嘗試在我的應用程序中實現一些滑動功能,但是我目前正在努力獲得所需的正確行為。
我有一個名為onTouchStart
的函數, onTouchStart
當前觸摸對象的clientX
和clientY
位置保存到狀態,如下所示:
touchStart(e) {
const touchObj = e.touches[0];
this.setState({
startX: touchObj.clientX,
startY: touchObj.clientY,
})
}
用戶開始在屏幕上移動手指后,我調用了另一個函數onTouchMove
,該函數保存了當前的clientX
和clientY
位置:
touchMove(e) {
const touchObj = e.touches[0];
this.setState({
currentX: touchObj.clientX,
currentY: touchObj.clientY,
})
}
為了弄清楚是up
滑動還是down
滑動,我調用了另一個函數,該函數采用開始位置並取走當前位置。 我還將其與150
的threshold
進行比較,以確保它是一次實際滑動,而不是長時間滑動(如滾動)。 看起來像這樣:
touchEnd(e) {
this.setState({
touchStarted: false,
})
if (Math.abs(this.state.startX - this.state.currentX) < this.state.threshold) {
this.setState({
direction: this.state.startY > this.state.currentY ? "top" : "bottom",
})
console.log(this.state.direction);
}
}
這是檢測up
和down
刷卡細,但在非常第一滑動用戶執行,所述的console.log返回的原始狀態none
(而不是up
或down
)。
如何確保初始滑動始終設置為正確的方向?
問題繼續存在,用戶必須在相反的方向上滑動兩次才能將狀態保存到要滑動的實際方向上,如下所示:
上//沒有
向上//向上
向下//向上
下//下
很抱歉,如果我沒有很好地闡明我的問題。 這是指向CodePen的鏈接 ,您可以在其中進一步詳細了解問題(需要電話或仿真器才能查看觸摸事件)。
任何指針將不勝感激。 謝謝!
這是固定筆的鏈接。
touchEnd(e)
{
var s = {
touchStarted: false
};
if (Math.abs(this.state.startX - this.state.currentX) < this.state.threshold)
{
s.direction = this.state.startY > this.state.currentY ? "top" : "bottom";
}
this.setState(s, () => console.log(this.state.direction))
}
唯一的“問題”是您假設setState是同步的,因此在調用它后立即檢查狀態值,而並非如此。 如果要在setState
完成后檢查狀態的值,請使用其第二個參數傳遞回調函數。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.