成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

使用React Native構建類似Tinder的加載器

開發 前端
在這篇文章中我會嘗試描述在React Native中構建一個類似Tinder的加載器所遇到的調整我把它分成三個挑戰。

在這篇文章中我會嘗試描述在React Native中構建一個類似Tinder的加載器所遇到的調整我把它分成三個挑戰。

挑戰1:布局

 

 

 

在上面的截圖中,你可以看到頭像和它后面的圓,都在屏幕正中間。 感謝 Flexbox,通過添加"justifyContent:'center'"和"alignItems:'center'",可以輕松地將元素水平和垂直居中。在這種情況下,我不得不居中兩個元素。我可以使用 Flexbox 作為頭像或圓圈。我選擇了頭像。對于背景圓我使用"position:absolute"和負邊距來完成我的目標。

  1. container: { 
  2.   flex: 1, 
  3.   justifyContent: 'center', // this centers the avatar vertically 
  4.   alignItems: 'center', // this centers the avatar horizontally 
  5. }, 
  6. circle: { 
  7.   width: circleSize, 
  8.   height: circleSize, 
  9.   position: 'absolute'
  10.   left: deviceWidth/2, 
  11.   top: deviceHeight/2, 
  12.   marginLeft: -circleSize/2, 
  13.   marginTop: -circleSize/2 
  14. } 

挑戰2:動畫

 

 

 

 React Native有一個動畫庫,稱為Animated。我用它來放大圓圈并將其淡出。如果你知道如何使用 interpolate 方法,并在一個循環重復動畫,圓圈的動畫就可以解決了。

我知道,"react-native-animatable"庫提供了一個名為"iterationCount:infinitive"的屬性,但是Animated API沒有內置這樣的功能。所以我不得不自己構建它。

我的***個想法是遞歸。我創建了一個新的函數,它設置動畫值為零,然后在回調中把值擴展到1,當動畫完成后,我再次調用該函數。

  1. animate() { 
  2.   this.anim.setValue(0); 
  3.   Animated.timing(this.anim, { 
  4.     toValue: 1, 
  5.     duration: 3000, 
  6.     easing: Easing.in 
  7.   }) 
  8.   .start(this.animate.bind(this)); 
  9.  

雖然它可以工作,并且代碼看起來挺干凈,但它有一個問題:我不能停止動畫,它會不停的重復。 我最終使用 setInverval 和 clearInterval 來創建了一個能夠被停止的循環。

挑戰3:交互 

***的挑戰是與頭像的交互。每次你點擊它,一個新的圓圈會出現,而不會干擾前一個。這意味著,屏幕上可能同時有多個圓圈。我很快意識到,當前的代碼無法運作。 所以我創建了第二個組件,它代表一個單一的圓。每個圓圈都有自己的"動畫生命周期"。我仍然使用setInterval,但現在它創建一個新的圓圈,而不是管理動畫。當您按下頭像時,會創建另一個圓圈。

  1. setCircleInterval() { 
  2.   this.interval = setInterval(this.addCircle, 3000); 
  3.   this.addCircle(); 
  4. addCircle() { 
  5.   this.setState({ 
  6.     circles: [...this.state.circles, this.counter] 
  7.   }); 
  8.    
  9.   this.counter++; 
  10.  

有一件事仍然未處理。只要用戶按下不動,新頭像就不再會被創建,直到在他釋放屏幕之后才創建新的圓圈。 幸運的是,Touchable 組件有兩個事件,它們有助于處理這件事情:onPressIn 和 onPressOut。當***個事件被調用時,間隔被清除,因此不會創建任何新的圓,當第二個事件被觸發時,將再次設置間隔(會再創建圓圈)。

  1. onAvatarPressIn() { 
  2.   clearInterval(this.interval); 
  3. onAvatarPressOut() { 
  4.   this.setCircleInterval(); 
  5.  

結論

這個練習花了一些時間,我對結果很滿意。在 React Native 中創建 UI 非常有趣,我期待著從 React Native 中的流行應用程序構建其他組件。如果您有任何想法或愿望,請讓我知道!

請查看Github上的完整代碼

謝謝閱讀!

責任編輯:龐桂玉 來源: segmentfault
相關推薦

2016-08-31 17:03:20

JavascriptReact NativWeb

2017-03-21 21:37:06

組件UI測試架構

2021-09-18 09:00:00

區塊鏈應用JavaScript

2016-10-13 19:01:59

React NativUbuntu

2023-09-04 08:32:43

web開發圖像

2016-10-31 11:26:13

ReactRedux前端應用

2024-05-15 11:42:33

FlutterWeb 庫應用程序

2021-07-25 21:36:24

Windows操作系統功能

2016-11-23 16:48:20

react-nativandroidjavascript

2016-08-12 13:55:06

2023-06-24 17:09:06

React前端

2024-07-08 00:00:07

2015-09-22 09:50:36

FacebookAndroid

2017-09-11 14:35:34

編輯器開發環境React

2016-08-12 08:49:46

React NativFacebookNative

2017-01-09 16:40:07

React NatiAndroid 開發

2015-10-10 16:02:36

React NativAndroid

2016-08-15 13:34:37

React NativiOSjs入口

2017-03-09 13:29:04

ReactNative JSPatch

2024-01-19 09:03:06

ReactTypeScripFlexbox
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 国产精品大片 | 久久亚洲欧美日韩精品专区 | 91久久精品一区二区二区 | 成人欧美 | 超碰成人免费观看 | 99精品国产一区二区三区 | 国产精品美女久久久久久不卡 | 午夜久久| 亚洲不卡在线视频 | 免费在线观看91 | 国产在线二区 | 欧美日韩在线视频一区 | 久久9热| 国产激情自拍视频 | 国产激情片在线观看 | 日本不卡一区二区三区在线观看 | 91久久久久久久久久久 | 日韩精品在线播放 | 欧美日韩不卡合集视频 | 成人精品一区二区 | 色综合久久天天综合网 | 大久 | 成人精品一区二区三区中文字幕 | 日韩一区二区在线观看视频 | 美女视频黄色片 | 亚洲一区二区三区桃乃木香奈 | 久久人爽 | 九色91视频 | 亚洲精选久久 | 欧美日韩国产高清 | 精品伊人久久 | 免费视频二区 | 日韩欧美在线免费观看视频 | 久久噜噜噜精品国产亚洲综合 | 亚洲一区二区三区四区五区午夜 | 国产精品成人69xxx免费视频 | 国产精品美女久久久 | 久草在线免费资源 | 国产精品久久久久久久久久尿 | 国内激情av片 | 国产a级毛毛片 |