React開發實踐 如何做出好用的Switch元件

2021-08-19 12:42:37 字數 3316 閱讀 3632

前言

手勢檢測

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

假設手指從 (x1,y1) 點滑到 (x2,y2) 點,那麼手指在兩點間滑動的x軸相對距離就是 x2 - x1 ,y軸相對距離 y2 - y1。所以,只要我們能夠獲取手指的座標位置,就能算出手指每次移動的相對距離,然後把δx和δy告知 move 事件的監聽函式。

所以,move事件的***一般是這樣(注意es6語法):

_onmove (event)  = event;

...}

無論多麼複雜的手勢系統,他們都會基於四個最基礎的觸控事件:

touchstart

touchmove

touchend

touchcancel

通過他們可以獲取手指觸控點的座標資訊,進而算出手指移動的相對距離。

根據上面的**,先來實現 touch 事件監聽函式:

_ontouchstart(e)
_ontouchstart 函式非常簡單,就是記錄下初始觸控點的座標,儲存在startx starty 變數中。

_ontouchmove(e) );

this.startx = point.pagex;

this.starty = point.pagey;

e.preventdefault();

}

_ontouchmove 函式邏輯也比較清楚,通過 touch 的觸控點 point 和 startx, starty 得到手指的相對位移 deltax, deltay, 然後發出 onmove 事件,告知***有 move 事件發生,並攜帶 deltax, deltay 資訊。最後,用現在的觸控點座標去更新 startx, starty。

_ontouchend(e) 

_ontouchcancel(e)

既然我們要用 react 實現元件,那就把 move 事件轉化成 react **:

render() );

}

一定注意我們用了 react.children.only 限制只有乙個子級,思考一下為什麼。完整的**請參考這裡,我們只給出大致結構:

export default

class

gestures

extends

component

_emitevent(eventtype,e) {}

_ontouchstart(e) {}

_ontouchmove(e) {}

_ontouchcancel(e){}

_ontouchend(e){}

render(){}

}gestures.proptypes = ;

switch 元件實現

return (

ref="toggler" classname="toggler">div>

div>);}

translatex = deltax0 + deltax1 + ... + deltaxn
有了這個公式,就可以用 react 來實現了。首先修改render函式:

render()  = this.state;

let togglestyle = px,0px) translatez(0)`,

webkittransform: `translate($px,0px) translatez(0)`

}return (

toggler"

ref="togger" style=>);}

在 gestures 中,用 this.onmove 去監聽 move 事件。在 onmove 函式中,需要累加 deltax 作為 toggler 的位移。

然而還有兩個明顯的問題。

當手指抬起時,toggler 就立即停止移動了。而我們的需求是當手指抬起時,toggler 需要自動滑到開始或者結束的位置。

也就是說,還需要監聽手指在 toggler 上面的 touchstart 和 touchend 事件。當 touchstart 發生時,需要開啟 toggler 移動的開關,當 touchend 發生時,需要根據情況讓 toggler 滑到開始或結束的位置。

邏輯還是很清楚,下面來修改**吧:

首先為 toggler 加上 touch 監聽函式

render()  

ontouchcancel=

ontouchend=

ref="togger" style=>

...}

在 ontoggertouchstart 函式中,開啟滑動開關(movingenable) , 同時取消 toggler 位移動畫。

ontoggertouchstart(e)
在 ontoggertouchcancel 函式中,關閉滑動開關,同時為 toggler 新增乙個位移動畫。還根據 toggler 此時的位移量(translatex),將 toggler 調整為回到初始位置(0) 或者回到最大位置(xboundary)。

完整**請參考 github

如何做出更好的跳槽選擇

前言 著眼回看上篇文章推送,已經過去很長時間。此前曾自我要求,每月至少有篇文章產出。如今拖延多日,內心惶惶不安。自憂三天打魚兩天曬網,做事有始無終。先簡單解釋為何拖更,一是筆者前段時間打算換份工作,期間多在準備面試。二是希望博文能有深入理解,不至於嚼之無味。缺乏充足時間以及平穩心態導致幾篇文章起了開...

如何做出半透明和閃光效果

如何做出半透明和閃光效果 一開始看到這樣的效果的時候,我感覺非常酷,等到搞明白原理之後,才發現原來很酷的效果可以通過很簡單的 實現,這就更酷了。首先,需要獲得讀取一些,最好是自然的,帶點後現代風格的那種。像這張,帶有一種工廠頹廢風格的,就很是適合。然後需要在影象中建立乙個矩形。如果是直接建立的話,那...

教你如何做出有創意的作品

我們想創意,要去生活中尋找靈感 越貼近生活越好,而不是去胡思亂想憑空捏造,雖然沒有洞察的創意也不一定是差創意,但是有洞察的創意更能引起共鳴 更能打動人,也更能引發傳播。手機有毒,畫面是把手機做成毒蛇 蜘蛛等 沉迷於手機會讓這個世界毫無生氣,把低頭玩手機的人做成無頭喪屍的樣子。這兩個創意的前半句都是創...