基礎篇章:React Native之 ScrollView 的講解
(友情提示:RN學習,從最基礎的開始,大家不要嫌棄太基礎,會的同學請自行略過,希望不要耽誤已經會的同學的寶貴時間)
編者按:其實我並不太喜歡在週末發公眾號,畢竟大家都在休息和放鬆,不想學習,但是今天在群裡我看到有人說:這周群主關於React Native的文章發的很少,不夠學的,我發的少, 是因為我看閱讀量少,所以減少了釋出次數,但是看到群裡的人這麼一問,感覺我必須今天再多發一篇。回饋給一直跟著我學習的程式設計師和開發者。
大家好,我是ScrollView,相信做過移動或者前端開發的人肯定都很熟悉我,對,我就是那個可以滾動的容器,滾有點難聽,我是可以滑動的容器,我滑動起來,摩擦摩擦,似魔鬼的步伐。我不僅可以上下滾動,就是垂直,還可以左右滾動,這叫有水平。我厲不厲害?我這個人,為人心胸寬廣,可以包容很多東西,我這叫宰相肚子裡能撐船,什麼元件,什麼檢視都可以放進來,主要是本人太餓了,啥都喜歡吃。這就是我的自我介紹。
關於我,我還想說,我這個人身上笑點比較低,隨便一觸控就想笑,當然,你們摸我,讓我幹什麼事,我還是很聽話的,唯獨有一點就是你們別想讓我滾,讓我滾是有條件的,條件就是必須讓我吃飽,吃撐了才可以,這樣我才有力氣滾動(檢視高度一定才可以滾動)。要麼設定我的身高是固定的,當然我想長高,所以不建議這麼做,要麼就是設定我上級的高度,當然要這樣做,不要忘了設定flex:1,要不然一樣沒用。
我的性格
來看看我有哪些性格特點,只有知道了我的性格特點,才更能容易瞭解我,針對我,容易控制我啊,如果你不瞭解我,就想讓我幫你幹活?做夢去吧。
- contentContainerStyle 這個樣式會應用到一個內層的內容容器上,所有的子檢視都會包裹在內容容器內。
- horizontal 如果設為true,意思是我吃的東西都是左右,在水平方向上排列的,貌似不太容易消化(玩笑),預設false,當然是垂直方向了。
- keyboardDismissMode enum('none', 'interactive', 'on-drag') 當我滾動的時候,是否隱藏鍵盤
- none(預設值),拖拽時不隱藏軟鍵盤。
- on-drag 當拖拽開始的時候隱藏軟鍵盤。
- interactive 軟鍵盤伴隨拖拽操作同步地消失,並且如果往上滑動會恢復鍵盤。安卓裝置上不支援這個選項,會表現的和none一樣。
- keyboardShouldPersistTaps 當此屬性為false的時候,在軟鍵盤啟用之後,點選焦點文字輸入框以外的地方,鍵盤就會隱藏。如果為true,滾動檢視不會響應點選操作,並且鍵盤不會自動消失。預設值為false。
- onContentSizeChange function 該函式方法會在ScrollView內部可滾動內容的檢視發生變化時呼叫。
- onScroll function 在滾動的過程中,每幀最多呼叫一次此回撥函式。呼叫的頻率可以用scrollEventThrottle屬性來控制。
- pagingEnabled 如果為true,滾動檢視的滾動檢視大小的倍數滾動時停止。這可用於水平分頁。預設值false。
- refreshControl 告訴RefreshControl元件,為我供下拉重新整理功能。
- removeClippedSubviews (實驗屬性) 當為true的時候。在ScrollView檢視之外的檢視(該檢視的overflow屬性值必須要為hidden)會從被暫時移除,該設定可以提高滾動的效能。
- scrollEnabled 為false時,內容檢視不可以滾動,預設值true。
- showsHorizontalScrollIndicator 當為true時,顯示水平滾動條
- showsVerticalScrollIndicator 與上面正好相反。
我的穿衣打扮
來,一起來看看,我有哪些外在的服飾和化妝品,可以使用更佳美觀和漂亮,修飾我的內在和外在。
- backfaceVisibility (['visible', 'hidden']) 顯示還是隱藏
- backgroundColor color 背景色
- borderBottomColor color 底部邊框顏色
- borderBottomLeftRadius number 左下角圓角大小
- borderBottomRightRadius 自己翻譯(與上同理)
- borderBottomWidth 底部邊框寬度
- borderColor color 邊框顏色
- borderLeftColor color
- borderLeftWidth number 同理
- borderRadius number 四周圓角大小
- borderRightColor color
- borderRightWidth number
- borderStyle ([’solid', 'dotted', 'dashed']) 邊框的樣式,是實現,還是點,還是虛線
- borderTopColor color
- borderTopLeftRadius number
- borderTopRightRadius number
- borderTopWidth number
- borderWidth number 邊框寬度
- opacity number 設定透明度
- overflow (['visible', 'hidden'])
- androidelevation number android5.0以上有的,立體陰影效果
- 我只介紹了以上常用的的風格,還有幾個和android相關,還有很多與ios相關的屬性,我就不再介紹了,自己去官方文件查查吧。地址:[https://facebook.github.io/react-native/docs/scrollview.html]
我的秀麗身材
聞其聲不見其人,光知道我,沒見過我豈不是很out?像我這麼美的人,你們不用我,是不是有點那個啥?哈哈……
魔鬼樣子
噢,不是這個樣子,錯了,是下面這個樣子,哈哈……
邏輯實現
import React, { Component } from 'react';
import {
AppRegistry,
StyleSheet,
Text,
View,
Image,
ScrollView,
TouchableOpacity,
} from 'react-native';
class ImageDemo extends Component {
render() {
return (
<View style={styles.container}>
<View style={styles.title_view}>
<Text style={styles.title_text}>
空間動態
</Text>
</View>
<ScrollView ref={(scrollView) => { _scrollView = scrollView; }}>
<View style={styles.three_image_view}>
<View style={styles.vertical_view}>
<Image source={require('./img/igs.png')} style={{alignSelf:'center',width:45,height:45}} />
<Text style={styles.top_text}>
好友動態
</Text>
</View>
<View style={styles.vertical_view}>
<Image source={require('./img/eqc.png')} style={{alignSelf:'center',width:45,height:45}}/>
<Text style={styles.top_text}>
附近
</Text>
</View>
<View style={styles.vertical_view}>
<Image source={require('./img/iei.png')} style={{alignSelf:'center',width:45,height:45}}/>
<Text style={styles.top_text} >
興趣部落
</Text>
</View>
</View>
<View style={{height:30,backgroundColor:'#f9f9fb'}}/>
<View style={styles.rectangle_view}>
<View style={{flexDirection:'row',alignItems: 'center'}}>
<Image source={require('./img/nsa.png')} style={{alignSelf:'center',width:30,height:30}}/>
<Text style={styles.rectangle_text} >
羽毛球
</Text>
</View>
<Image source={require('./img/ppe.png')} style={{alignSelf:'center',width:20,height:20}}/>
</View>
<View style={styles.rectangle_view}>
<View style={{flexDirection:'row',alignItems: 'center'}}>
<Image source={require('./img/nsb.png')} style={{alignSelf:'center',width:30,height:30}}/>
<Text style={styles.rectangle_text} >
火車票
</Text>
</View>
<Image source={require('./img/ppe.png')} style={{alignSelf:'center',width:20,height:20}}/>
</View>
<View style={styles.rectangle_view}>
<View style={{flexDirection:'row',alignItems: 'center'}}>
<Image source={require('./img/nrz.png')} style={{alignSelf:'center',width:30,height:30}}/>
<Text style={styles.rectangle_text} >
視訊
</Text>
</View>
<Image source={require('./img/ppe.png')} style={{alignSelf:'center',width:20,height:20}}/>
</View>
<View style={styles.rectangle_view}>
<View style={{flexDirection:'row',alignItems: 'center'}}>
<Image source={require('./img/nsa.png')} style={{alignSelf:'center',width:30,height:30}}/>
<Text style={styles.rectangle_text} >
羽毛球
</Text>
</View>
<Image source={require('./img/ppe.png')} style={{alignSelf:'center',width:20,height:20}}/>
</View>
<View style={styles.rectangle_view}>
<View style={{flexDirection:'row',alignItems: 'center'}}>
<Image source={require('./img/nsb.png')} style={{alignSelf:'center',width:30,height:30}}/>
<Text style={styles.rectangle_text} >
火車票
</Text>
</View>
<Image source={require('./img/ppe.png')} style={{alignSelf:'center',width:20,height:20}}/>
</View>
<View style={styles.rectangle_view}>
<View style={{flexDirection:'row',alignItems: 'center'}}>
<Image source={require('./img/nrz.png')} style={{alignSelf:'center',width:30,height:30}}/>
<Text style={styles.rectangle_text} >
視訊
</Text>
</View>
<Image source={require('./img/ppe.png')} style={{alignSelf:'center',width:20,height:20}}/>
</View>
<View style={styles.rectangle_view}>
<View style={{flexDirection:'row',alignItems: 'center'}}>
<Image source={require('./img/nsa.png')} style={{alignSelf:'center',width:30,height:30}}/>
<Text style={styles.rectangle_text} >
羽毛球
</Text>
</View>
<Image source={require('./img/ppe.png')} style={{alignSelf:'center',width:20,height:20}}/>
</View>
<View style={styles.rectangle_view}>
<View style={{flexDirection:'row',alignItems: 'center'}}>
<Image source={require('./img/nsb.png')} style={{alignSelf:'center',width:30,height:30}}/>
<Text style={styles.rectangle_text} >
火車票
</Text>
</View>
<Image source={require('./img/ppe.png')} style={{alignSelf:'center',width:20,height:20}}/>
</View>
<View style={styles.rectangle_view}>
<View style={{flexDirection:'row',alignItems: 'center'}}>
<Image source={require('./img/nrz.png')} style={{alignSelf:'center',width:30,height:30}}/>
<Text style={styles.rectangle_text} >
視訊
</Text>
</View>
<Image source={require('./img/ppe.png')} style={{alignSelf:'center',width:20,height:20}}/>
</View>
<View style={styles.rectangle_view}>
<View style={{flexDirection:'row',alignItems: 'center'}}>
<Image source={require('./img/nsa.png')} style={{alignSelf:'center',width:30,height:30}}/>
<Text style={styles.rectangle_text} >
羽毛球
</Text>
</View>
<Image source={require('./img/ppe.png')} style={{alignSelf:'center',width:20,height:20}}/>
</View>
<View style={styles.rectangle_view}>
<View style={{flexDirection:'row',alignItems: 'center'}}>
<Image source={require('./img/nsb.png')} style={{alignSelf:'center',width:30,height:30}}/>
<Text style={styles.rectangle_text} >
火車票
</Text>
</View>
<Image source={require('./img/ppe.png')} style={{alignSelf:'center',width:20,height:20}}/>
</View>
<View style={styles.rectangle_view}>
<View style={{flexDirection:'row',alignItems: 'center'}}>
<Image source={require('./img/nrz.png')} style={{alignSelf:'center',width:30,height:30}}/>
<Text style={styles.rectangle_text} >
視訊
</Text>
</View>
<Image source={require('./img/ppe.png')} style={{alignSelf:'center',width:20,height:20}}/>
</View>
<View style={styles.rectangle_view}>
<View style={{flexDirection:'row',alignItems: 'center'}}>
<Image source={require('./img/nsa.png')} style={{alignSelf:'center',width:30,height:30}}/>
<Text style={styles.rectangle_text} >
羽毛球
</Text>
</View>
<Image source={require('./img/ppe.png')} style={{alignSelf:'center',width:20,height:20}}/>
</View>
<View style={styles.rectangle_view}>
<View style={{flexDirection:'row',alignItems: 'center'}}>
<Image source={require('./img/nsb.png')} style={{alignSelf:'center',width:30,height:30}}/>
<Text style={styles.rectangle_text} >
火車票
</Text>
</View>
<Image source={require('./img/ppe.png')} style={{alignSelf:'center',width:20,height:20}}/>
</View>
<View style={styles.rectangle_view}>
<View style={{flexDirection:'row',alignItems: 'center'}}>
<Image source={require('./img/nrz.png')} style={{alignSelf:'center',width:30,height:30}}/>
<Text style={styles.rectangle_text} >
視訊
</Text>
</View>
<Image source={require('./img/ppe.png')} style={{alignSelf:'center',width:20,height:20}}/>
</View>
<View style={styles.rectangle_view}>
<View style={{flexDirection:'row',alignItems: 'center'}}>
<Image source={require('./img/nsa.png')} style={{alignSelf:'center',width:30,height:30}}/>
<Text style={styles.rectangle_text} >
羽毛球
</Text>
</View>
<Image source={require('./img/ppe.png')} style={{alignSelf:'center',width:20,height:20}}/>
</View>
<View style={styles.rectangle_view}>
<View style={{flexDirection:'row',alignItems: 'center'}}>
<Image source={require('./img/nsb.png')} style={{alignSelf:'center',width:30,height:30}}/>
<Text style={styles.rectangle_text} >
火車票
</Text>
</View>
<Image source={require('./img/ppe.png')} style={{alignSelf:'center',width:20,height:20}}/>
</View>
<View style={styles.rectangle_view}>
<View style={{flexDirection:'row',alignItems: 'center'}}>
<Image source={require('./img/nrz.png')} style={{alignSelf:'center',width:30,height:30}}/>
<Text style={styles.rectangle_text} >
視訊
</Text>
</View>
<Image source={require('./img/ppe.png')} style={{alignSelf:'center',width:20,height:20}}/>
</View>
</ScrollView>
<TouchableOpacity
style={styles.button}
onPress={() => { _scrollView.scrollTo({y: 0}); }}>
<Text>讓我滾回去</Text>
</TouchableOpacity>
</View>
);
}
}
AppRegistry.registerComponent('ImageDemo', () => ImageDemo);
ok,到這裡ScrollView就講完了,由於非常簡單,大家趕緊去練練手吧!不懂的可以在下面留言,由於我也是第一次學,歡迎大家提出不足,一起交流學習。