Skip to content

Commit 9946415

Browse files
authored
Merge pull request #56 from dohooo/verticalmode
feat: vertical mode
2 parents 5287a09 + d912bea commit 9946415

File tree

13 files changed

+281
-224
lines changed

13 files changed

+281
-224
lines changed

README.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -102,6 +102,7 @@ import Carousel from 'react-native-reanimated-carousel';
102102
| panGestureHandlerProps || {} | Omit<Partial\<PanGestureHandlerProps\>,'onHandlerStateChange'> | PanGestureHandler props |
103103
| windowSize || 0 | number | The maximum number of items that can respond to pan gesture events, `0` means all items will respond to pan gesture events |
104104
| onProgressChange || | onProgressChange?: (offsetProgress: number,absoluteProgress: number) => void | On progress change. `offsetProgress`:Total of offset distance (0 390 780 ...); `absoluteProgress`:Convert to index (0 1 2 ...) |
105+
| vertical || false | boolean | Layout items vertically instead of horizontally |
105106

106107
## Ref
107108

README.zh-CN.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -102,6 +102,7 @@ import Carousel from 'react-native-reanimated-carousel';
102102
| panGestureHandlerProps || {} | Omit<Partial\<PanGestureHandlerProps\>,'onHandlerStateChange'> | PanGestureHandler props |
103103
| windowSize || 0 | number | 能响应平移手势事件的最大 item 数量,0 表示所有元素都会先响应 |
104104
| onProgressChange || | onProgressChange?: (offsetProgress: number,absoluteProgress: number) => void | 当滚动进度发生变化时触发 `offsetProgress`:总的偏移值 (0 390 780 ...); `absoluteProgress`:转化为 index 的进度变化 (0 1 2 ...) |
105+
| vertical || false | boolean | 将元素垂直布局而不是水平 |
105106

106107
## Ref
107108

example/src/App.tsx

Lines changed: 62 additions & 75 deletions
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,6 @@
11
/* eslint-disable react-native/no-inline-styles */
22
import * as React from 'react';
3-
import {
4-
Button,
5-
Dimensions,
6-
Image,
7-
ImageSourcePropType,
8-
View,
9-
} from 'react-native';
3+
import { Button, Image, ImageSourcePropType, View } from 'react-native';
104
import Carousel from '../../src/index';
115
import type { ICarouselInstance } from '../../src/types';
126
import Animated, {
@@ -16,9 +10,6 @@ import Animated, {
1610
useSharedValue,
1711
} from 'react-native-reanimated';
1812

19-
const window = Dimensions.get('window');
20-
const PAGE_WIDTH = window.width;
21-
2213
const data: ImageSourcePropType[] = [
2314
require('../assets/carousel-0.jpg'),
2415
require('../assets/carousel-1.jpg'),
@@ -38,27 +29,27 @@ export default function App() {
3829
paddingTop: 100,
3930
}}
4031
>
41-
<View style={{ width: PAGE_WIDTH, height: 240 }}>
42-
<Carousel
43-
defaultIndex={0}
44-
ref={r}
45-
width={PAGE_WIDTH}
46-
parallaxScrollingScale={0.8}
47-
data={data}
48-
renderItem={(source, index) => {
49-
return (
50-
<Image
51-
key={index}
52-
source={source}
53-
style={{
54-
width: '100%',
55-
height: '100%',
56-
}}
57-
/>
58-
);
59-
}}
60-
/>
61-
</View>
32+
<Carousel
33+
style={{ height: 240 }}
34+
defaultIndex={0}
35+
ref={r}
36+
vertical
37+
height={240}
38+
parallaxScrollingScale={0.8}
39+
data={data}
40+
renderItem={(source, index) => {
41+
return (
42+
<Image
43+
key={index}
44+
source={source}
45+
style={{
46+
width: '100%',
47+
height: '100%',
48+
}}
49+
/>
50+
);
51+
}}
52+
/>
6253
<View
6354
style={{
6455
marginTop: 24,
@@ -79,55 +70,51 @@ export default function App() {
7970
}}
8071
/>
8172
</View>
82-
<View
83-
style={{
84-
height: 240,
85-
alignItems: 'center',
73+
<Carousel
74+
style={{ height: 240 }}
75+
onProgressChange={(_, absoluteProgress) => {
76+
progressValue.value = absoluteProgress;
8677
}}
87-
>
88-
<Carousel
89-
onProgressChange={(_, absoluteProgress) => {
90-
progressValue.value = absoluteProgress;
78+
vertical
79+
mode="parallax"
80+
height={240}
81+
parallaxScrollingScale={0.8}
82+
data={data}
83+
renderItem={(source, i) => {
84+
return (
85+
<Image
86+
key={i}
87+
source={source}
88+
style={{
89+
width: '100%',
90+
height: '100%',
91+
}}
92+
/>
93+
);
94+
}}
95+
/>
96+
{!!progressValue && (
97+
<View
98+
style={{
99+
flexDirection: 'row',
100+
justifyContent: 'space-between',
101+
width: 100,
102+
alignSelf: 'center',
103+
marginTop: 8,
91104
}}
92-
mode="parallax"
93-
width={window.width}
94-
parallaxScrollingScale={0.8}
95-
data={data}
96-
renderItem={(source, i) => {
105+
>
106+
{data.map((_, index) => {
97107
return (
98-
<Image
99-
key={i}
100-
source={source}
101-
style={{
102-
width: '100%',
103-
height: '100%',
104-
}}
108+
<PaginationItem
109+
animValue={progressValue}
110+
index={index}
111+
key={index}
112+
length={data.length}
105113
/>
106114
);
107-
}}
108-
/>
109-
{!!progressValue && (
110-
<View
111-
style={{
112-
flexDirection: 'row',
113-
justifyContent: 'space-between',
114-
width: 100,
115-
alignSelf: 'center',
116-
}}
117-
>
118-
{data.map((_, index) => {
119-
return (
120-
<PaginationItem
121-
animValue={progressValue}
122-
index={index}
123-
key={index}
124-
length={data.length}
125-
/>
126-
);
127-
})}
128-
</View>
129-
)}
130-
</View>
115+
})}
116+
</View>
117+
)}
131118
</View>
132119
);
133120
}

0 commit comments

Comments
 (0)