溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

怎么用React做出好用的Switch組件

發布時間:2022-03-25 09:54:01 來源:億速云 閱讀:293 作者:小新 欄目:web開發

小編給大家分享一下怎么用React做出好用的Switch組件,希望大家閱讀完這篇文章之后都有所收獲,下面讓我們一起去探討吧!

前言

HTML5 將 WEB 開發者的戰場從傳統的 PC 端帶到了移動端.然而移動端交互的核心在于手勢和滑動,如果只是將 PC 端的點擊體驗簡單地移植到移動端,勢必讓移動端體驗變得了無生趣.以某 APP 收銀臺的支付密碼輸入框為例,里面的 Switch 組件只能通過點擊改變狀態,和原生控件的體驗有著非常大的差距,不符合移動端的交互習慣.接下來,我們來嘗試做出一個支持手指滑動操作的 Switch 組件,提升用戶體驗.

手勢檢測

手勢交互的關鍵在于一套手勢事件監測系統,用于檢測move, tap, double tap, long tap, swipe, pinch, rotate等手勢行為.安卓和 IOS 都提供一套完善的手勢系統供原生 APP 調用,遺憾的是,HTML5 還沒有相應的 API,需要 HTML5 工程師自己實現.出于簡化,我們的 Switch 組件只支持 move 事件,因此,本章也只實現 move 事件的檢測.其他事件的檢測我們將在下一篇博文 <<HTML5 手勢檢測原理和實現>> 中詳細介紹.

我們對move事件的要求非常簡單,就是每當手指在 DOM 內移動時,就把手指劃過的相對距離告知監聽器.

假設手指從 (X1,Y1) 點滑到 (X2,Y2) 點,那么手指在兩點間滑動的X軸相對距離就是 X2 - X1 ,Y軸相對距離 Y2 - Y1.所以,只要我們能夠獲取手指的坐標位置,就能算出手指每次移動的相對距離,然后把&Delta;X和&Delta;Y告知 move 事件的監聽函數.

所以,move事件的監聽器一般是這樣(注意ES6語法):

_onMove (event) {

  let {

    deltaX,  //手指在X軸上的位移

    deltaY   //手指在Y軸上的位移

  } = event;

  ...

}

無論多么復雜的手勢系統,他們都會基于四個最基礎的觸摸事件:

touchstart

touchmove

touchend

touchcancel

通過他們可以獲取手指觸摸點的坐標信息,進而算出手指移動的相對距離.

根據上面的圖解,先來實現 touch 事件監聽函數:

_onTouchStart(e) {

  let point = e.touches ? e.touches[0] : e;

  this.startX= point.pageX;

  this.startY = point.pageY;

}

_onTouchStart 函數非常簡單,就是記錄下初始觸摸點的坐標,保存在startX startY 變量中.

_onTouchMove(e) {

  let point = e.touches ? e.touches[0] :e;

  let deltaX = point.pageX - this.startX;

  let deltaY = point.pageY - this.startY;

  this._emitEvent('onMove',{

    deltaX,

    deltaY

  });

  this.startX = point.pageX;

  this.startY = point.pageY;

  e.preventDefault();

}

_onTouchMove 函數邏輯也比較清楚,通過 touch 的觸摸點 point 和 startX, startY 得到手指的相對位移 deltaX, deltaY, 然后發出 onMove 事件,告知監聽器有 move 事件發生,并攜帶 deltaX, deltaY 信息.最后,用現在的觸摸點坐標去更新 startX, startY.

看完了這篇文章,相信你對“怎么用React做出好用的Switch組件”有了一定的了解,如果想了解更多相關知識,歡迎關注億速云行業資訊頻道,感謝各位的閱讀!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

亚洲午夜精品一区二区_中文无码日韩欧免_久久香蕉精品视频_欧美主播一区二区三区美女