react-native-reanimated-carousel 3.0.6 → 3.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +7 -0
- package/lib/commonjs/Carousel.js +1 -1
- package/lib/commonjs/Carousel.js.map +1 -1
- package/lib/commonjs/hooks/useCarouselController.js +1 -1
- package/lib/commonjs/hooks/useCarouselController.js.map +1 -1
- package/lib/commonjs/hooks/useCommonVariables.js +1 -1
- package/lib/commonjs/hooks/useCommonVariables.js.map +1 -1
- package/lib/commonjs/hooks/useOffsetX.js +1 -1
- package/lib/commonjs/hooks/useOffsetX.js.map +1 -1
- package/lib/commonjs/layouts/BaseLayout.js +1 -1
- package/lib/commonjs/layouts/BaseLayout.js.map +1 -1
- package/lib/commonjs/layouts/ParallaxLayout.js +1 -1
- package/lib/commonjs/layouts/ParallaxLayout.js.map +1 -1
- package/lib/module/Carousel.js +7 -7
- package/lib/module/Carousel.js.map +1 -1
- package/lib/module/hooks/useCarouselController.js +23 -23
- package/lib/module/hooks/useCarouselController.js.map +1 -1
- package/lib/module/hooks/useCommonVariables.js +10 -6
- package/lib/module/hooks/useCommonVariables.js.map +1 -1
- package/lib/module/hooks/useOffsetX.js +3 -3
- package/lib/module/hooks/useOffsetX.js.map +1 -1
- package/lib/module/layouts/BaseLayout.js +3 -3
- package/lib/module/layouts/BaseLayout.js.map +1 -1
- package/lib/module/layouts/ParallaxLayout.js +2 -2
- package/lib/module/layouts/ParallaxLayout.js.map +1 -1
- package/lib/typescript/hooks/useCarouselController.d.ts +1 -1
- package/lib/typescript/hooks/useCommonVariables.d.ts +1 -1
- package/lib/typescript/hooks/useOffsetX.d.ts +1 -1
- package/lib/typescript/layouts/BaseLayout.d.ts +1 -1
- package/lib/typescript/layouts/ParallaxLayout.d.ts +1 -1
- package/lib/typescript/types.d.ts +6 -2
- package/package.json +1 -1
- package/src/Carousel.tsx +7 -7
- package/src/hooks/useCarouselController.tsx +24 -27
- package/src/hooks/useCommonVariables.ts +15 -7
- package/src/hooks/useOffsetX.ts +4 -4
- package/src/layouts/BaseLayout.tsx +4 -4
- package/src/layouts/ParallaxLayout.tsx +3 -3
- package/src/types.ts +6 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["Carousel.tsx"],"names":["React","runOnJS","useDerivedValue","useCarouselController","useAutoPlay","usePropsErrorBoundary","ScrollViewGesture","useVisibleRanges","StyleSheet","BaseLayout","useLayoutConfig","useInitProps","CTX","useCommonVariables","useOnProgressChange","computedRealIndexWithAutoFillData","Carousel","forwardRef","_props","ref","props","testID","data","rawData","loop","autoFillData","mode","style","width","height","vertical","autoPlay","windowSize","autoPlayReverse","autoPlayInterval","scrollAnimationDuration","withAnimation","renderItem","onScrollEnd","onSnapToItem","onScrollBegin","onProgressChange","customAnimation","defaultIndex","commonVariables","size","handlerOffsetX","dataLength","length","offsetX","totalSize","x","value","isNaN","carouselController","_onScrollEnd","duration","next","prev","scrollTo","getSharedIndex","getCurrentIndex","start","startAutoPlay","pause","pauseAutoPlay","useCallback","_sharedIndex","Math","round","realIndex","index","scrollViewGestureOnScrollBegin","scrollViewGestureOnScrollEnd","scrollViewGestureOnTouchBegin","scrollViewGestureOnTouchEnd","useImperativeHandle","visibleRanges","total","viewSize","translation","layoutConfig","renderLayout","item","i","animationValue","common","styles","container","itemsVertical","itemsHorizontal","map","create","overflow","flexDirection"],"mappings":"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","sourcesContent":["import React from 'react';\nimport { runOnJS, useDerivedValue } from 'react-native-reanimated';\n\nimport { useCarouselController } from './hooks/useCarouselController';\nimport { useAutoPlay } from './hooks/useAutoPlay';\nimport { usePropsErrorBoundary } from './hooks/usePropsErrorBoundary';\nimport { ScrollViewGesture } from './ScrollViewGesture';\nimport { useVisibleRanges } from './hooks/useVisibleRanges';\n\nimport type { ICarouselInstance, TCarouselProps } from './types';\nimport { StyleSheet } from 'react-native';\nimport { BaseLayout } from './layouts/BaseLayout';\nimport { useLayoutConfig } from './hooks/useLayoutConfig';\nimport { useInitProps } from './hooks/useInitProps';\nimport { CTX } from './store';\nimport { useCommonVariables } from './hooks/useCommonVariables';\nimport { useOnProgressChange } from './hooks/useOnProgressChange';\nimport { computedRealIndexWithAutoFillData } from './utils/computedWithAutoFillData';\n\nconst Carousel = React.forwardRef<ICarouselInstance, TCarouselProps<any>>(\n (_props, ref) => {\n const props = useInitProps(_props);\n\n const {\n testID,\n data,\n rawData,\n loop,\n autoFillData,\n mode,\n style,\n width,\n height,\n vertical,\n autoPlay,\n windowSize,\n autoPlayReverse,\n autoPlayInterval,\n scrollAnimationDuration,\n withAnimation,\n renderItem,\n onScrollEnd,\n onSnapToItem,\n onScrollBegin,\n onProgressChange,\n customAnimation,\n defaultIndex,\n } = props;\n\n const commonVariables = useCommonVariables(props);\n const { size, handlerOffsetX } = commonVariables;\n const dataLength = data.length;\n\n const offsetX = useDerivedValue(() => {\n const totalSize = size * dataLength;\n const x = handlerOffsetX.value % totalSize;\n\n if (!loop) {\n return handlerOffsetX.value;\n }\n return isNaN(x) ? 0 : x;\n }, [loop, size, dataLength]);\n\n usePropsErrorBoundary(props);\n useOnProgressChange({\n autoFillData,\n loop,\n size,\n offsetX,\n rawData,\n onProgressChange,\n });\n\n const carouselController = useCarouselController({\n loop,\n size,\n data,\n autoFillData,\n handlerOffsetX,\n withAnimation,\n defaultIndex,\n onScrollEnd: () => runOnJS(_onScrollEnd)(),\n onScrollBegin: () => !!onScrollBegin && runOnJS(onScrollBegin)(),\n duration: scrollAnimationDuration,\n });\n\n const { next, prev, scrollTo, getSharedIndex, getCurrentIndex } =\n carouselController;\n\n const { start: startAutoPlay, pause: pauseAutoPlay } = useAutoPlay({\n autoPlay,\n autoPlayInterval,\n autoPlayReverse,\n carouselController,\n });\n\n const _onScrollEnd = React.useCallback(() => {\n const _sharedIndex = Math.round(getSharedIndex());\n\n const realIndex = computedRealIndexWithAutoFillData({\n index: _sharedIndex,\n dataLength: rawData.length,\n loop,\n autoFillData,\n });\n\n if (onSnapToItem) {\n onSnapToItem(realIndex);\n }\n if (onScrollEnd) {\n onScrollEnd(realIndex);\n }\n }, [\n loop,\n autoFillData,\n rawData.length,\n getSharedIndex,\n onSnapToItem,\n onScrollEnd,\n ]);\n\n const scrollViewGestureOnScrollBegin = React.useCallback(() => {\n pauseAutoPlay();\n onScrollBegin?.();\n }, [onScrollBegin, pauseAutoPlay]);\n\n const scrollViewGestureOnScrollEnd = React.useCallback(() => {\n startAutoPlay();\n _onScrollEnd();\n }, [_onScrollEnd, startAutoPlay]);\n\n const scrollViewGestureOnTouchBegin = React.useCallback(pauseAutoPlay, [\n pauseAutoPlay,\n ]);\n\n const scrollViewGestureOnTouchEnd = React.useCallback(startAutoPlay, [\n startAutoPlay,\n ]);\n\n React.useImperativeHandle(\n ref,\n () => ({\n next,\n prev,\n getCurrentIndex,\n scrollTo,\n }),\n [getCurrentIndex, next, prev, scrollTo]\n );\n\n const visibleRanges = useVisibleRanges({\n total: data.length,\n viewSize: size,\n translation: handlerOffsetX,\n windowSize,\n });\n\n const layoutConfig = useLayoutConfig({ ...props, size });\n\n const renderLayout = React.useCallback(\n (item: any, i: number) => {\n const realIndex = computedRealIndexWithAutoFillData({\n index: i,\n dataLength: rawData.length,\n loop,\n autoFillData,\n });\n\n return (\n <BaseLayout\n key={i}\n index={i}\n handlerOffsetX={offsetX}\n visibleRanges={visibleRanges}\n animationStyle={customAnimation || layoutConfig}\n >\n {({ animationValue }) =>\n renderItem({\n item,\n index: realIndex,\n animationValue,\n })\n }\n </BaseLayout>\n );\n },\n [\n loop,\n rawData,\n offsetX,\n visibleRanges,\n autoFillData,\n renderItem,\n layoutConfig,\n customAnimation,\n ]\n );\n\n return (\n <CTX.Provider value={{ props, common: commonVariables }}>\n <ScrollViewGesture\n key={mode}\n size={size}\n translation={handlerOffsetX}\n style={[\n styles.container,\n {\n width: width || '100%',\n height: height || '100%',\n },\n style,\n vertical\n ? styles.itemsVertical\n : styles.itemsHorizontal,\n ]}\n testID={testID}\n onScrollBegin={scrollViewGestureOnScrollBegin}\n onScrollEnd={scrollViewGestureOnScrollEnd}\n onTouchBegin={scrollViewGestureOnTouchBegin}\n onTouchEnd={scrollViewGestureOnTouchEnd}\n >\n {data.map(renderLayout)}\n </ScrollViewGesture>\n </CTX.Provider>\n );\n }\n);\n\nexport default Carousel as <T extends any>(\n props: React.PropsWithChildren<TCarouselProps<T>>\n) => React.ReactElement;\n\nconst styles = StyleSheet.create({\n container: {\n overflow: 'hidden',\n },\n itemsHorizontal: {\n flexDirection: 'row',\n },\n itemsVertical: {\n flexDirection: 'column',\n },\n});\n"]}
|
|
1
|
+
{"version":3,"sources":["Carousel.tsx"],"names":["React","runOnJS","useDerivedValue","useCarouselController","useAutoPlay","usePropsErrorBoundary","ScrollViewGesture","useVisibleRanges","StyleSheet","BaseLayout","useLayoutConfig","useInitProps","CTX","useCommonVariables","useOnProgressChange","computedRealIndexWithAutoFillData","Carousel","forwardRef","_props","ref","props","testID","data","rawData","loop","autoFillData","mode","style","width","height","vertical","autoPlay","windowSize","autoPlayReverse","autoPlayInterval","scrollAnimationDuration","withAnimation","renderItem","onScrollEnd","onSnapToItem","onScrollBegin","onProgressChange","customAnimation","defaultIndex","commonVariables","size","handlerOffset","dataLength","length","offsetX","totalSize","x","value","isNaN","carouselController","_onScrollEnd","duration","next","prev","scrollTo","getSharedIndex","getCurrentIndex","start","startAutoPlay","pause","pauseAutoPlay","useCallback","_sharedIndex","Math","round","realIndex","index","scrollViewGestureOnScrollBegin","scrollViewGestureOnScrollEnd","scrollViewGestureOnTouchBegin","scrollViewGestureOnTouchEnd","useImperativeHandle","visibleRanges","total","viewSize","translation","layoutConfig","renderLayout","item","i","animationValue","common","styles","container","itemsVertical","itemsHorizontal","map","create","overflow","flexDirection"],"mappings":"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","sourcesContent":["import React from 'react';\nimport { runOnJS, useDerivedValue } from 'react-native-reanimated';\n\nimport { useCarouselController } from './hooks/useCarouselController';\nimport { useAutoPlay } from './hooks/useAutoPlay';\nimport { usePropsErrorBoundary } from './hooks/usePropsErrorBoundary';\nimport { ScrollViewGesture } from './ScrollViewGesture';\nimport { useVisibleRanges } from './hooks/useVisibleRanges';\n\nimport type { ICarouselInstance, TCarouselProps } from './types';\nimport { StyleSheet } from 'react-native';\nimport { BaseLayout } from './layouts/BaseLayout';\nimport { useLayoutConfig } from './hooks/useLayoutConfig';\nimport { useInitProps } from './hooks/useInitProps';\nimport { CTX } from './store';\nimport { useCommonVariables } from './hooks/useCommonVariables';\nimport { useOnProgressChange } from './hooks/useOnProgressChange';\nimport { computedRealIndexWithAutoFillData } from './utils/computedWithAutoFillData';\n\nconst Carousel = React.forwardRef<ICarouselInstance, TCarouselProps<any>>(\n (_props, ref) => {\n const props = useInitProps(_props);\n\n const {\n testID,\n data,\n rawData,\n loop,\n autoFillData,\n mode,\n style,\n width,\n height,\n vertical,\n autoPlay,\n windowSize,\n autoPlayReverse,\n autoPlayInterval,\n scrollAnimationDuration,\n withAnimation,\n renderItem,\n onScrollEnd,\n onSnapToItem,\n onScrollBegin,\n onProgressChange,\n customAnimation,\n defaultIndex,\n } = props;\n\n const commonVariables = useCommonVariables(props);\n const { size, handlerOffset } = commonVariables;\n const dataLength = data.length;\n\n const offsetX = useDerivedValue(() => {\n const totalSize = size * dataLength;\n const x = handlerOffset.value % totalSize;\n\n if (!loop) {\n return handlerOffset.value;\n }\n return isNaN(x) ? 0 : x;\n }, [loop, size, dataLength]);\n\n usePropsErrorBoundary(props);\n useOnProgressChange({\n autoFillData,\n loop,\n size,\n offsetX,\n rawData,\n onProgressChange,\n });\n\n const carouselController = useCarouselController({\n loop,\n size,\n data,\n autoFillData,\n handlerOffset,\n withAnimation,\n defaultIndex,\n onScrollEnd: () => runOnJS(_onScrollEnd)(),\n onScrollBegin: () => !!onScrollBegin && runOnJS(onScrollBegin)(),\n duration: scrollAnimationDuration,\n });\n\n const { next, prev, scrollTo, getSharedIndex, getCurrentIndex } =\n carouselController;\n\n const { start: startAutoPlay, pause: pauseAutoPlay } = useAutoPlay({\n autoPlay,\n autoPlayInterval,\n autoPlayReverse,\n carouselController,\n });\n\n const _onScrollEnd = React.useCallback(() => {\n const _sharedIndex = Math.round(getSharedIndex());\n\n const realIndex = computedRealIndexWithAutoFillData({\n index: _sharedIndex,\n dataLength: rawData.length,\n loop,\n autoFillData,\n });\n\n if (onSnapToItem) {\n onSnapToItem(realIndex);\n }\n if (onScrollEnd) {\n onScrollEnd(realIndex);\n }\n }, [\n loop,\n autoFillData,\n rawData.length,\n getSharedIndex,\n onSnapToItem,\n onScrollEnd,\n ]);\n\n const scrollViewGestureOnScrollBegin = React.useCallback(() => {\n pauseAutoPlay();\n onScrollBegin?.();\n }, [onScrollBegin, pauseAutoPlay]);\n\n const scrollViewGestureOnScrollEnd = React.useCallback(() => {\n startAutoPlay();\n _onScrollEnd();\n }, [_onScrollEnd, startAutoPlay]);\n\n const scrollViewGestureOnTouchBegin = React.useCallback(pauseAutoPlay, [\n pauseAutoPlay,\n ]);\n\n const scrollViewGestureOnTouchEnd = React.useCallback(startAutoPlay, [\n startAutoPlay,\n ]);\n\n React.useImperativeHandle(\n ref,\n () => ({\n next,\n prev,\n getCurrentIndex,\n scrollTo,\n }),\n [getCurrentIndex, next, prev, scrollTo]\n );\n\n const visibleRanges = useVisibleRanges({\n total: data.length,\n viewSize: size,\n translation: handlerOffset,\n windowSize,\n });\n\n const layoutConfig = useLayoutConfig({ ...props, size });\n\n const renderLayout = React.useCallback(\n (item: any, i: number) => {\n const realIndex = computedRealIndexWithAutoFillData({\n index: i,\n dataLength: rawData.length,\n loop,\n autoFillData,\n });\n\n return (\n <BaseLayout\n key={i}\n index={i}\n handlerOffset={offsetX}\n visibleRanges={visibleRanges}\n animationStyle={customAnimation || layoutConfig}\n >\n {({ animationValue }) =>\n renderItem({\n item,\n index: realIndex,\n animationValue,\n })\n }\n </BaseLayout>\n );\n },\n [\n loop,\n rawData,\n offsetX,\n visibleRanges,\n autoFillData,\n renderItem,\n layoutConfig,\n customAnimation,\n ]\n );\n\n return (\n <CTX.Provider value={{ props, common: commonVariables }}>\n <ScrollViewGesture\n key={mode}\n size={size}\n translation={handlerOffset}\n style={[\n styles.container,\n {\n width: width || '100%',\n height: height || '100%',\n },\n style,\n vertical\n ? styles.itemsVertical\n : styles.itemsHorizontal,\n ]}\n testID={testID}\n onScrollBegin={scrollViewGestureOnScrollBegin}\n onScrollEnd={scrollViewGestureOnScrollEnd}\n onTouchBegin={scrollViewGestureOnTouchBegin}\n onTouchEnd={scrollViewGestureOnTouchEnd}\n >\n {data.map(renderLayout)}\n </ScrollViewGesture>\n </CTX.Provider>\n );\n }\n);\n\nexport default Carousel as <T extends any>(\n props: React.PropsWithChildren<TCarouselProps<T>>\n) => React.ReactElement;\n\nconst styles = StyleSheet.create({\n container: {\n overflow: 'hidden',\n },\n itemsHorizontal: {\n flexDirection: 'row',\n },\n itemsVertical: {\n flexDirection: 'column',\n },\n});\n"]}
|
|
@@ -9,7 +9,7 @@ export function useCarouselController(options) {
|
|
|
9
9
|
size,
|
|
10
10
|
data,
|
|
11
11
|
loop,
|
|
12
|
-
|
|
12
|
+
handlerOffset,
|
|
13
13
|
withAnimation,
|
|
14
14
|
defaultIndex = 0,
|
|
15
15
|
duration,
|
|
@@ -26,21 +26,21 @@ export function useCarouselController(options) {
|
|
|
26
26
|
const sharedPreIndex = useRef(defaultIndex);
|
|
27
27
|
const currentFixedPage = React.useCallback(() => {
|
|
28
28
|
if (loop) {
|
|
29
|
-
return -Math.round(
|
|
29
|
+
return -Math.round(handlerOffset.value / size);
|
|
30
30
|
}
|
|
31
31
|
|
|
32
|
-
const fixed =
|
|
33
|
-
return Math.round(
|
|
34
|
-
}, [
|
|
32
|
+
const fixed = handlerOffset.value / size % dataInfo.length;
|
|
33
|
+
return Math.round(handlerOffset.value <= 0 ? Math.abs(fixed) : Math.abs(fixed > 0 ? dataInfo.length - fixed : 0));
|
|
34
|
+
}, [handlerOffset, dataInfo, size, loop]);
|
|
35
35
|
|
|
36
36
|
function setSharedIndex(newSharedIndex) {
|
|
37
37
|
sharedIndex.current = newSharedIndex;
|
|
38
38
|
}
|
|
39
39
|
|
|
40
40
|
useAnimatedReaction(() => {
|
|
41
|
-
const
|
|
42
|
-
const toInt = round(
|
|
43
|
-
const isPositive =
|
|
41
|
+
const handlerOffsetValue = handlerOffset.value;
|
|
42
|
+
const toInt = round(handlerOffsetValue / size) % dataInfo.length;
|
|
43
|
+
const isPositive = handlerOffsetValue <= 0;
|
|
44
44
|
const i = isPositive ? Math.abs(toInt) : Math.abs(toInt > 0 ? dataInfo.length - toInt : 0);
|
|
45
45
|
const newSharedIndexValue = convertToSharedIndex({
|
|
46
46
|
loop,
|
|
@@ -59,7 +59,7 @@ export function useCarouselController(options) {
|
|
|
59
59
|
} = _ref;
|
|
60
60
|
index.value = i;
|
|
61
61
|
runOnJS(setSharedIndex)(newSharedIndexValue);
|
|
62
|
-
}, [sharedPreIndex, sharedIndex, size, dataInfo, index, loop, autoFillData,
|
|
62
|
+
}, [sharedPreIndex, sharedIndex, size, dataInfo, index, loop, autoFillData, handlerOffset]);
|
|
63
63
|
const getCurrentIndex = React.useCallback(() => {
|
|
64
64
|
return index.value;
|
|
65
65
|
}, [index]);
|
|
@@ -112,12 +112,12 @@ export function useCarouselController(options) {
|
|
|
112
112
|
index.value = nextPage;
|
|
113
113
|
|
|
114
114
|
if (animated) {
|
|
115
|
-
|
|
115
|
+
handlerOffset.value = scrollWithTiming(-nextPage * size, onFinished);
|
|
116
116
|
} else {
|
|
117
|
-
|
|
117
|
+
handlerOffset.value = -nextPage * size;
|
|
118
118
|
onFinished === null || onFinished === void 0 ? void 0 : onFinished();
|
|
119
119
|
}
|
|
120
|
-
}, [canSliding, loop, index, dataInfo, onScrollBegin,
|
|
120
|
+
}, [canSliding, loop, index, dataInfo, onScrollBegin, handlerOffset, size, scrollWithTiming, currentFixedPage]);
|
|
121
121
|
const prev = React.useCallback(function () {
|
|
122
122
|
let opts = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};
|
|
123
123
|
const {
|
|
@@ -131,12 +131,12 @@ export function useCarouselController(options) {
|
|
|
131
131
|
index.value = prevPage;
|
|
132
132
|
|
|
133
133
|
if (animated) {
|
|
134
|
-
|
|
134
|
+
handlerOffset.value = scrollWithTiming(-prevPage * size, onFinished);
|
|
135
135
|
} else {
|
|
136
|
-
|
|
136
|
+
handlerOffset.value = -prevPage * size;
|
|
137
137
|
onFinished === null || onFinished === void 0 ? void 0 : onFinished();
|
|
138
138
|
}
|
|
139
|
-
}, [canSliding, loop, index, onScrollBegin,
|
|
139
|
+
}, [canSliding, loop, index, onScrollBegin, handlerOffset, size, scrollWithTiming, currentFixedPage]);
|
|
140
140
|
const to = React.useCallback(opts => {
|
|
141
141
|
const {
|
|
142
142
|
i,
|
|
@@ -147,9 +147,9 @@ export function useCarouselController(options) {
|
|
|
147
147
|
if (!canSliding()) return;
|
|
148
148
|
onScrollBegin === null || onScrollBegin === void 0 ? void 0 : onScrollBegin(); // direction -> 1 | -1
|
|
149
149
|
|
|
150
|
-
const isPositiveZero = Object.is(
|
|
151
|
-
const isNegativeZero = Object.is(
|
|
152
|
-
const direction = isPositiveZero ? 1 : isNegativeZero ? -1 : Math.sign(
|
|
150
|
+
const isPositiveZero = Object.is(handlerOffset.value, +0);
|
|
151
|
+
const isNegativeZero = Object.is(handlerOffset.value, -0);
|
|
152
|
+
const direction = isPositiveZero ? 1 : isNegativeZero ? -1 : Math.sign(handlerOffset.value); // target offset
|
|
153
153
|
|
|
154
154
|
const offset = i * size * direction; // page width size * page count
|
|
155
155
|
|
|
@@ -157,20 +157,20 @@ export function useCarouselController(options) {
|
|
|
157
157
|
let isCloseToNextLoop = false;
|
|
158
158
|
|
|
159
159
|
if (loop) {
|
|
160
|
-
isCloseToNextLoop = Math.abs(
|
|
160
|
+
isCloseToNextLoop = Math.abs(handlerOffset.value % totalSize) / totalSize >= 0.5;
|
|
161
161
|
}
|
|
162
162
|
|
|
163
|
-
const finalOffset = (Math.floor(Math.abs(
|
|
163
|
+
const finalOffset = (Math.floor(Math.abs(handlerOffset.value / totalSize)) + (isCloseToNextLoop ? 1 : 0)) * totalSize * direction + offset;
|
|
164
164
|
|
|
165
165
|
if (animated) {
|
|
166
166
|
index.value = i;
|
|
167
|
-
|
|
167
|
+
handlerOffset.value = scrollWithTiming(finalOffset, onFinished);
|
|
168
168
|
} else {
|
|
169
|
-
|
|
169
|
+
handlerOffset.value = finalOffset;
|
|
170
170
|
index.value = i;
|
|
171
171
|
onFinished === null || onFinished === void 0 ? void 0 : onFinished();
|
|
172
172
|
}
|
|
173
|
-
}, [index, canSliding, onScrollBegin,
|
|
173
|
+
}, [index, canSliding, onScrollBegin, handlerOffset, size, dataInfo.length, loop, scrollWithTiming]);
|
|
174
174
|
const scrollTo = React.useCallback(function () {
|
|
175
175
|
let opts = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};
|
|
176
176
|
const {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["useCarouselController.tsx"],"names":["React","useRef","Easing","runOnJS","useAnimatedReaction","useSharedValue","dealWithAnimation","convertToSharedIndex","round","useCarouselController","options","size","data","loop","handlerOffsetX","withAnimation","defaultIndex","duration","autoFillData","dataInfo","useMemo","length","disable","originalLength","index","sharedIndex","sharedPreIndex","currentFixedPage","useCallback","Math","value","fixed","abs","setSharedIndex","newSharedIndex","current","handlerOffsetXValue","toInt","isPositive","i","newSharedIndexValue","rawDataLength","getCurrentIndex","canSliding","onScrollEnd","onScrollBegin","scrollWithTiming","toValue","onFinished","callback","isFinished","defaultWithAnimation","type","config","easing","easeOutQuart","next","opts","count","animated","nextPage","prev","prevPage","to","isPositiveZero","Object","is","isNegativeZero","direction","sign","offset","totalSize","isCloseToNextLoop","finalOffset","floor","scrollTo","n","getSharedIndex"],"mappings":"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","sourcesContent":["import React, { useRef } from 'react';\nimport type Animated from 'react-native-reanimated';\nimport { Easing } from '../constants';\nimport {\n runOnJS,\n useAnimatedReaction,\n useSharedValue,\n} from 'react-native-reanimated';\nimport type {\n TCarouselActionOptions,\n TCarouselProps,\n WithTimingAnimation,\n} from '../types';\nimport { dealWithAnimation } from '../utils/dealWithAnimation';\nimport { convertToSharedIndex } from '../utils/computedWithAutoFillData';\nimport { round } from '../utils/log';\n\ninterface IOpts {\n loop: boolean;\n size: number;\n data: TCarouselProps['data'];\n autoFillData: TCarouselProps['autoFillData'];\n handlerOffsetX: Animated.SharedValue<number>;\n withAnimation?: TCarouselProps['withAnimation'];\n duration?: number;\n defaultIndex?: number;\n onScrollBegin?: () => void;\n onScrollEnd?: () => void;\n}\n\nexport interface ICarouselController {\n getSharedIndex: () => number;\n prev: (opts?: TCarouselActionOptions) => void;\n next: (opts?: TCarouselActionOptions) => void;\n getCurrentIndex: () => number;\n scrollTo: (opts?: TCarouselActionOptions) => void;\n}\n\nexport function useCarouselController(options: IOpts): ICarouselController {\n const {\n size,\n data,\n loop,\n handlerOffsetX,\n withAnimation,\n defaultIndex = 0,\n duration,\n autoFillData,\n } = options;\n\n const dataInfo = React.useMemo(\n () => ({\n length: data.length,\n disable: !data.length,\n originalLength: data.length,\n }),\n [data]\n );\n\n const index = useSharedValue<number>(defaultIndex);\n // The Index displayed to the user\n const sharedIndex = useRef<number>(defaultIndex);\n const sharedPreIndex = useRef<number>(defaultIndex);\n\n const currentFixedPage = React.useCallback(() => {\n if (loop) {\n return -Math.round(handlerOffsetX.value / size);\n }\n\n const fixed = (handlerOffsetX.value / size) % dataInfo.length;\n return Math.round(\n handlerOffsetX.value <= 0\n ? Math.abs(fixed)\n : Math.abs(fixed > 0 ? dataInfo.length - fixed : 0)\n );\n }, [handlerOffsetX, dataInfo, size, loop]);\n\n function setSharedIndex(newSharedIndex: number) {\n sharedIndex.current = newSharedIndex;\n }\n\n useAnimatedReaction(\n () => {\n const handlerOffsetXValue = handlerOffsetX.value;\n const toInt = round(handlerOffsetXValue / size) % dataInfo.length;\n const isPositive = handlerOffsetXValue <= 0;\n const i = isPositive\n ? Math.abs(toInt)\n : Math.abs(toInt > 0 ? dataInfo.length - toInt : 0);\n\n const newSharedIndexValue = convertToSharedIndex({\n loop,\n rawDataLength: dataInfo.originalLength,\n autoFillData: autoFillData!,\n index: i,\n });\n\n return {\n i,\n newSharedIndexValue,\n };\n },\n ({ i, newSharedIndexValue }) => {\n index.value = i;\n runOnJS(setSharedIndex)(newSharedIndexValue);\n },\n [\n sharedPreIndex,\n sharedIndex,\n size,\n dataInfo,\n index,\n loop,\n autoFillData,\n handlerOffsetX,\n ]\n );\n\n const getCurrentIndex = React.useCallback(() => {\n return index.value;\n }, [index]);\n\n const canSliding = React.useCallback(() => {\n return !dataInfo.disable;\n }, [dataInfo]);\n\n const onScrollEnd = React.useCallback(() => {\n options.onScrollEnd?.();\n }, [options]);\n\n const onScrollBegin = React.useCallback(() => {\n options.onScrollBegin?.();\n }, [options]);\n\n const scrollWithTiming = React.useCallback(\n (toValue: number, onFinished?: () => void) => {\n 'worklet';\n const callback = (isFinished: boolean) => {\n 'worklet';\n if (isFinished) {\n runOnJS(onScrollEnd)();\n onFinished && runOnJS(onFinished)();\n }\n };\n\n const defaultWithAnimation: WithTimingAnimation = {\n type: 'timing',\n config: { duration, easing: Easing.easeOutQuart },\n };\n\n return dealWithAnimation(withAnimation ?? defaultWithAnimation)(\n toValue,\n callback\n );\n },\n [duration, withAnimation, onScrollEnd]\n );\n\n const next = React.useCallback(\n (opts: TCarouselActionOptions = {}) => {\n 'worklet';\n const { count = 1, animated = true, onFinished } = opts;\n if (!canSliding() || (!loop && index.value >= dataInfo.length - 1))\n return;\n\n onScrollBegin?.();\n\n const nextPage = currentFixedPage() + count;\n index.value = nextPage;\n\n if (animated) {\n handlerOffsetX.value = scrollWithTiming(\n -nextPage * size,\n onFinished\n ) as any;\n } else {\n handlerOffsetX.value = -nextPage * size;\n onFinished?.();\n }\n },\n [\n canSliding,\n loop,\n index,\n dataInfo,\n onScrollBegin,\n handlerOffsetX,\n size,\n scrollWithTiming,\n currentFixedPage,\n ]\n );\n\n const prev = React.useCallback(\n (opts: TCarouselActionOptions = {}) => {\n const { count = 1, animated = true, onFinished } = opts;\n if (!canSliding() || (!loop && index.value <= 0)) return;\n\n onScrollBegin?.();\n\n const prevPage = currentFixedPage() - count;\n index.value = prevPage;\n\n if (animated) {\n handlerOffsetX.value = scrollWithTiming(\n -prevPage * size,\n onFinished\n );\n } else {\n handlerOffsetX.value = -prevPage * size;\n onFinished?.();\n }\n },\n [\n canSliding,\n loop,\n index,\n onScrollBegin,\n handlerOffsetX,\n size,\n scrollWithTiming,\n currentFixedPage,\n ]\n );\n\n const to = React.useCallback(\n (opts: { i: number; animated: boolean; onFinished?: () => void }) => {\n const { i, animated = false, onFinished } = opts;\n if (i === index.value) return;\n if (!canSliding()) return;\n\n onScrollBegin?.();\n // direction -> 1 | -1\n const isPositiveZero = Object.is(handlerOffsetX.value, +0);\n const isNegativeZero = Object.is(handlerOffsetX.value, -0);\n const direction = isPositiveZero\n ? 1\n : isNegativeZero\n ? -1\n : Math.sign(handlerOffsetX.value);\n\n // target offset\n const offset = i * size * direction;\n // page width size * page count\n const totalSize = dataInfo.length * size;\n\n let isCloseToNextLoop = false;\n\n if (loop) {\n isCloseToNextLoop =\n Math.abs(handlerOffsetX.value % totalSize) / totalSize >=\n 0.5;\n }\n\n const finalOffset =\n (Math.floor(Math.abs(handlerOffsetX.value / totalSize)) +\n (isCloseToNextLoop ? 1 : 0)) *\n totalSize *\n direction +\n offset;\n\n if (animated) {\n index.value = i;\n handlerOffsetX.value = scrollWithTiming(\n finalOffset,\n onFinished\n );\n } else {\n handlerOffsetX.value = finalOffset;\n index.value = i;\n onFinished?.();\n }\n },\n [\n index,\n canSliding,\n onScrollBegin,\n handlerOffsetX,\n size,\n dataInfo.length,\n loop,\n scrollWithTiming,\n ]\n );\n\n const scrollTo = React.useCallback(\n (opts: TCarouselActionOptions = {}) => {\n const { index: i, count, animated = false, onFinished } = opts;\n if (typeof i === 'number' && i > -1) {\n to({ i, animated, onFinished });\n return;\n }\n\n if (!count) {\n return;\n }\n\n const n = Math.round(count);\n\n if (n < 0) {\n prev({ count: Math.abs(n), animated, onFinished });\n } else {\n next({ count: n, animated, onFinished });\n }\n },\n [prev, next, to]\n );\n\n return {\n next,\n prev,\n scrollTo,\n getCurrentIndex,\n getSharedIndex: () => sharedIndex.current,\n };\n}\n"]}
|
|
1
|
+
{"version":3,"sources":["useCarouselController.tsx"],"names":["React","useRef","Easing","runOnJS","useAnimatedReaction","useSharedValue","dealWithAnimation","convertToSharedIndex","round","useCarouselController","options","size","data","loop","handlerOffset","withAnimation","defaultIndex","duration","autoFillData","dataInfo","useMemo","length","disable","originalLength","index","sharedIndex","sharedPreIndex","currentFixedPage","useCallback","Math","value","fixed","abs","setSharedIndex","newSharedIndex","current","handlerOffsetValue","toInt","isPositive","i","newSharedIndexValue","rawDataLength","getCurrentIndex","canSliding","onScrollEnd","onScrollBegin","scrollWithTiming","toValue","onFinished","callback","isFinished","defaultWithAnimation","type","config","easing","easeOutQuart","next","opts","count","animated","nextPage","prev","prevPage","to","isPositiveZero","Object","is","isNegativeZero","direction","sign","offset","totalSize","isCloseToNextLoop","finalOffset","floor","scrollTo","n","getSharedIndex"],"mappings":"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","sourcesContent":["import React, { useRef } from 'react';\nimport type Animated from 'react-native-reanimated';\nimport { Easing } from '../constants';\nimport {\n runOnJS,\n useAnimatedReaction,\n useSharedValue,\n} from 'react-native-reanimated';\nimport type {\n TCarouselActionOptions,\n TCarouselProps,\n WithTimingAnimation,\n} from '../types';\nimport { dealWithAnimation } from '../utils/dealWithAnimation';\nimport { convertToSharedIndex } from '../utils/computedWithAutoFillData';\nimport { round } from '../utils/log';\n\ninterface IOpts {\n loop: boolean;\n size: number;\n data: TCarouselProps['data'];\n autoFillData: TCarouselProps['autoFillData'];\n handlerOffset: Animated.SharedValue<number>;\n withAnimation?: TCarouselProps['withAnimation'];\n duration?: number;\n defaultIndex?: number;\n onScrollBegin?: () => void;\n onScrollEnd?: () => void;\n}\n\nexport interface ICarouselController {\n getSharedIndex: () => number;\n prev: (opts?: TCarouselActionOptions) => void;\n next: (opts?: TCarouselActionOptions) => void;\n getCurrentIndex: () => number;\n scrollTo: (opts?: TCarouselActionOptions) => void;\n}\n\nexport function useCarouselController(options: IOpts): ICarouselController {\n const {\n size,\n data,\n loop,\n handlerOffset,\n withAnimation,\n defaultIndex = 0,\n duration,\n autoFillData,\n } = options;\n\n const dataInfo = React.useMemo(\n () => ({\n length: data.length,\n disable: !data.length,\n originalLength: data.length,\n }),\n [data]\n );\n\n const index = useSharedValue<number>(defaultIndex);\n // The Index displayed to the user\n const sharedIndex = useRef<number>(defaultIndex);\n const sharedPreIndex = useRef<number>(defaultIndex);\n\n const currentFixedPage = React.useCallback(() => {\n if (loop) {\n return -Math.round(handlerOffset.value / size);\n }\n\n const fixed = (handlerOffset.value / size) % dataInfo.length;\n return Math.round(\n handlerOffset.value <= 0\n ? Math.abs(fixed)\n : Math.abs(fixed > 0 ? dataInfo.length - fixed : 0)\n );\n }, [handlerOffset, dataInfo, size, loop]);\n\n function setSharedIndex(newSharedIndex: number) {\n sharedIndex.current = newSharedIndex;\n }\n\n useAnimatedReaction(\n () => {\n const handlerOffsetValue = handlerOffset.value;\n const toInt = round(handlerOffsetValue / size) % dataInfo.length;\n const isPositive = handlerOffsetValue <= 0;\n const i = isPositive\n ? Math.abs(toInt)\n : Math.abs(toInt > 0 ? dataInfo.length - toInt : 0);\n\n const newSharedIndexValue = convertToSharedIndex({\n loop,\n rawDataLength: dataInfo.originalLength,\n autoFillData: autoFillData!,\n index: i,\n });\n\n return {\n i,\n newSharedIndexValue,\n };\n },\n ({ i, newSharedIndexValue }) => {\n index.value = i;\n runOnJS(setSharedIndex)(newSharedIndexValue);\n },\n [\n sharedPreIndex,\n sharedIndex,\n size,\n dataInfo,\n index,\n loop,\n autoFillData,\n handlerOffset,\n ]\n );\n\n const getCurrentIndex = React.useCallback(() => {\n return index.value;\n }, [index]);\n\n const canSliding = React.useCallback(() => {\n return !dataInfo.disable;\n }, [dataInfo]);\n\n const onScrollEnd = React.useCallback(() => {\n options.onScrollEnd?.();\n }, [options]);\n\n const onScrollBegin = React.useCallback(() => {\n options.onScrollBegin?.();\n }, [options]);\n\n const scrollWithTiming = React.useCallback(\n (toValue: number, onFinished?: () => void) => {\n 'worklet';\n const callback = (isFinished: boolean) => {\n 'worklet';\n if (isFinished) {\n runOnJS(onScrollEnd)();\n onFinished && runOnJS(onFinished)();\n }\n };\n\n const defaultWithAnimation: WithTimingAnimation = {\n type: 'timing',\n config: { duration, easing: Easing.easeOutQuart },\n };\n\n return dealWithAnimation(withAnimation ?? defaultWithAnimation)(\n toValue,\n callback\n );\n },\n [duration, withAnimation, onScrollEnd]\n );\n\n const next = React.useCallback(\n (opts: TCarouselActionOptions = {}) => {\n 'worklet';\n const { count = 1, animated = true, onFinished } = opts;\n if (!canSliding() || (!loop && index.value >= dataInfo.length - 1))\n return;\n\n onScrollBegin?.();\n\n const nextPage = currentFixedPage() + count;\n index.value = nextPage;\n\n if (animated) {\n handlerOffset.value = scrollWithTiming(\n -nextPage * size,\n onFinished\n ) as any;\n } else {\n handlerOffset.value = -nextPage * size;\n onFinished?.();\n }\n },\n [\n canSliding,\n loop,\n index,\n dataInfo,\n onScrollBegin,\n handlerOffset,\n size,\n scrollWithTiming,\n currentFixedPage,\n ]\n );\n\n const prev = React.useCallback(\n (opts: TCarouselActionOptions = {}) => {\n const { count = 1, animated = true, onFinished } = opts;\n if (!canSliding() || (!loop && index.value <= 0)) return;\n\n onScrollBegin?.();\n\n const prevPage = currentFixedPage() - count;\n index.value = prevPage;\n\n if (animated) {\n handlerOffset.value = scrollWithTiming(\n -prevPage * size,\n onFinished\n );\n } else {\n handlerOffset.value = -prevPage * size;\n onFinished?.();\n }\n },\n [\n canSliding,\n loop,\n index,\n onScrollBegin,\n handlerOffset,\n size,\n scrollWithTiming,\n currentFixedPage,\n ]\n );\n\n const to = React.useCallback(\n (opts: { i: number; animated: boolean; onFinished?: () => void }) => {\n const { i, animated = false, onFinished } = opts;\n if (i === index.value) return;\n if (!canSliding()) return;\n\n onScrollBegin?.();\n // direction -> 1 | -1\n const isPositiveZero = Object.is(handlerOffset.value, +0);\n const isNegativeZero = Object.is(handlerOffset.value, -0);\n const direction = isPositiveZero\n ? 1\n : isNegativeZero\n ? -1\n : Math.sign(handlerOffset.value);\n\n // target offset\n const offset = i * size * direction;\n // page width size * page count\n const totalSize = dataInfo.length * size;\n\n let isCloseToNextLoop = false;\n\n if (loop) {\n isCloseToNextLoop =\n Math.abs(handlerOffset.value % totalSize) / totalSize >=\n 0.5;\n }\n\n const finalOffset =\n (Math.floor(Math.abs(handlerOffset.value / totalSize)) +\n (isCloseToNextLoop ? 1 : 0)) *\n totalSize *\n direction +\n offset;\n\n if (animated) {\n index.value = i;\n handlerOffset.value = scrollWithTiming(finalOffset, onFinished);\n } else {\n handlerOffset.value = finalOffset;\n index.value = i;\n onFinished?.();\n }\n },\n [\n index,\n canSliding,\n onScrollBegin,\n handlerOffset,\n size,\n dataInfo.length,\n loop,\n scrollWithTiming,\n ]\n );\n\n const scrollTo = React.useCallback(\n (opts: TCarouselActionOptions = {}) => {\n const { index: i, count, animated = false, onFinished } = opts;\n if (typeof i === 'number' && i > -1) {\n to({ i, animated, onFinished });\n return;\n }\n\n if (!count) {\n return;\n }\n\n const n = Math.round(count);\n\n if (n < 0) {\n prev({ count: Math.abs(n), animated, onFinished });\n } else {\n next({ count: n, animated, onFinished });\n }\n },\n [prev, next, to]\n );\n\n return {\n next,\n prev,\n scrollTo,\n getCurrentIndex,\n getSharedIndex: () => sharedIndex.current,\n };\n}\n"]}
|
|
@@ -6,19 +6,23 @@ export function useCommonVariables(props) {
|
|
|
6
6
|
height,
|
|
7
7
|
width,
|
|
8
8
|
data,
|
|
9
|
-
defaultIndex
|
|
9
|
+
defaultIndex,
|
|
10
|
+
defaultScrollOffsetValue
|
|
10
11
|
} = props;
|
|
11
12
|
const size = vertical ? height : width;
|
|
12
13
|
const validLength = data.length - 1;
|
|
13
|
-
const
|
|
14
|
-
|
|
14
|
+
const defaultHandlerOffsetValue = -Math.abs(defaultIndex * size);
|
|
15
|
+
|
|
16
|
+
const _handlerOffset = useSharedValue(defaultHandlerOffsetValue);
|
|
17
|
+
|
|
18
|
+
const handlerOffset = defaultScrollOffsetValue !== null && defaultScrollOffsetValue !== void 0 ? defaultScrollOffsetValue : _handlerOffset;
|
|
15
19
|
React.useEffect(() => {
|
|
16
|
-
|
|
17
|
-
}, [vertical,
|
|
20
|
+
handlerOffset.value = defaultHandlerOffsetValue;
|
|
21
|
+
}, [vertical, handlerOffset, defaultHandlerOffsetValue]);
|
|
18
22
|
return {
|
|
19
23
|
size,
|
|
20
24
|
validLength,
|
|
21
|
-
|
|
25
|
+
handlerOffset
|
|
22
26
|
};
|
|
23
27
|
}
|
|
24
28
|
//# sourceMappingURL=useCommonVariables.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["useCommonVariables.ts"],"names":["React","useSharedValue","useCommonVariables","props","vertical","height","width","data","defaultIndex","size","validLength","length","
|
|
1
|
+
{"version":3,"sources":["useCommonVariables.ts"],"names":["React","useSharedValue","useCommonVariables","props","vertical","height","width","data","defaultIndex","defaultScrollOffsetValue","size","validLength","length","defaultHandlerOffsetValue","Math","abs","_handlerOffset","handlerOffset","useEffect","value"],"mappings":"AAAA,OAAOA,KAAP,MAAkB,OAAlB;AACA,SAAmBC,cAAnB,QAAyC,yBAAzC;AASA,OAAO,SAASC,kBAAT,CACHC,KADG,EAEa;AAChB,QAAM;AACFC,IAAAA,QADE;AAEFC,IAAAA,MAFE;AAGFC,IAAAA,KAHE;AAIFC,IAAAA,IAJE;AAKFC,IAAAA,YALE;AAMFC,IAAAA;AANE,MAOFN,KAPJ;AAQA,QAAMO,IAAI,GAAGN,QAAQ,GAAGC,MAAH,GAAYC,KAAjC;AACA,QAAMK,WAAW,GAAGJ,IAAI,CAACK,MAAL,GAAc,CAAlC;AACA,QAAMC,yBAAyB,GAAG,CAACC,IAAI,CAACC,GAAL,CAASP,YAAY,GAAGE,IAAxB,CAAnC;;AACA,QAAMM,cAAc,GAAGf,cAAc,CAASY,yBAAT,CAArC;;AACA,QAAMI,aAAa,GAAGR,wBAAH,aAAGA,wBAAH,cAAGA,wBAAH,GAA+BO,cAAlD;AAEAhB,EAAAA,KAAK,CAACkB,SAAN,CAAgB,MAAM;AAClBD,IAAAA,aAAa,CAACE,KAAd,GAAsBN,yBAAtB;AACH,GAFD,EAEG,CAACT,QAAD,EAAWa,aAAX,EAA0BJ,yBAA1B,CAFH;AAIA,SAAO;AACHH,IAAAA,IADG;AAEHC,IAAAA,WAFG;AAGHM,IAAAA;AAHG,GAAP;AAKH","sourcesContent":["import React from 'react';\nimport Animated, { useSharedValue } from 'react-native-reanimated';\nimport type { TInitializeCarouselProps } from './useInitProps';\n\ninterface ICommonVariables {\n size: number;\n validLength: number;\n handlerOffset: Animated.SharedValue<number>;\n}\n\nexport function useCommonVariables(\n props: TInitializeCarouselProps<any>\n): ICommonVariables {\n const {\n vertical,\n height,\n width,\n data,\n defaultIndex,\n defaultScrollOffsetValue,\n } = props;\n const size = vertical ? height : width;\n const validLength = data.length - 1;\n const defaultHandlerOffsetValue = -Math.abs(defaultIndex * size);\n const _handlerOffset = useSharedValue<number>(defaultHandlerOffsetValue);\n const handlerOffset = defaultScrollOffsetValue ?? _handlerOffset;\n\n React.useEffect(() => {\n handlerOffset.value = defaultHandlerOffsetValue;\n }, [vertical, handlerOffset, defaultHandlerOffsetValue]);\n\n return {\n size,\n validLength,\n handlerOffset,\n };\n}\n"]}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { Extrapolate, interpolate, useDerivedValue } from 'react-native-reanimated';
|
|
2
2
|
export const useOffsetX = (opts, visibleRanges) => {
|
|
3
3
|
const {
|
|
4
|
-
|
|
4
|
+
handlerOffset,
|
|
5
5
|
index,
|
|
6
6
|
size,
|
|
7
7
|
loop,
|
|
@@ -35,10 +35,10 @@ export const useOffsetX = (opts, visibleRanges) => {
|
|
|
35
35
|
if (loop) {
|
|
36
36
|
const inputRange = [-TOTAL_WIDTH, MIN - HALF_WIDTH - startPos - Number.MIN_VALUE, MIN - HALF_WIDTH - startPos, 0, MAX + HALF_WIDTH - startPos, MAX + HALF_WIDTH - startPos + Number.MIN_VALUE, TOTAL_WIDTH];
|
|
37
37
|
const outputRange = [startPos, MAX + HALF_WIDTH - Number.MIN_VALUE, MIN - HALF_WIDTH, startPos, MAX + HALF_WIDTH, MIN - HALF_WIDTH + Number.MIN_VALUE, startPos];
|
|
38
|
-
return interpolate(
|
|
38
|
+
return interpolate(handlerOffset.value, inputRange, outputRange, Extrapolate.CLAMP);
|
|
39
39
|
}
|
|
40
40
|
|
|
41
|
-
return
|
|
41
|
+
return handlerOffset.value + size * index;
|
|
42
42
|
}, [loop, data, viewCount, type, size, visibleRanges]);
|
|
43
43
|
return x;
|
|
44
44
|
};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["useOffsetX.ts"],"names":["Extrapolate","interpolate","useDerivedValue","useOffsetX","opts","visibleRanges","
|
|
1
|
+
{"version":3,"sources":["useOffsetX.ts"],"names":["Extrapolate","interpolate","useDerivedValue","useOffsetX","opts","visibleRanges","handlerOffset","index","size","loop","data","type","viewCount","Math","round","length","ITEM_LENGTH","VALID_LENGTH","TOTAL_WIDTH","HALF_WIDTH","positiveCount","startPos","MAX","MIN","x","negativeRange","positiveRange","value","Number","MAX_SAFE_INTEGER","inputRange","MIN_VALUE","outputRange","CLAMP"],"mappings":"AAAA,SACIA,WADJ,EAEIC,WAFJ,EAGIC,eAHJ,QAIO,yBAJP;AAiBA,OAAO,MAAMC,UAAU,GAAG,CAACC,IAAD,EAAcC,aAAd,KAAgD;AACtE,QAAM;AACFC,IAAAA,aADE;AAEFC,IAAAA,KAFE;AAGFC,IAAAA,IAHE;AAIFC,IAAAA,IAJE;AAKFC,IAAAA,IALE;AAMFC,IAAAA,IAAI,GAAG,UANL;AAOFC,IAAAA,SAAS,GAAGC,IAAI,CAACC,KAAL,CAAW,CAACJ,IAAI,CAACK,MAAL,GAAc,CAAf,IAAoB,CAA/B;AAPV,MAQFX,IARJ;AAUA,QAAMY,WAAW,GAAGN,IAAI,CAACK,MAAzB;AACA,QAAME,YAAY,GAAGD,WAAW,GAAG,CAAnC;AACA,QAAME,WAAW,GAAGV,IAAI,GAAGQ,WAA3B;AACA,QAAMG,UAAU,GAAG,MAAMX,IAAzB;AAEA,QAAMY,aAAa,GACfT,IAAI,KAAK,UAAT,GAAsBC,SAAtB,GAAkCK,YAAY,GAAGL,SADrD;AAGA,MAAIS,QAAQ,GAAGb,IAAI,GAAGD,KAAtB;;AACA,MAAIA,KAAK,GAAGa,aAAZ,EAA2B;AACvBC,IAAAA,QAAQ,GAAG,CAACd,KAAK,GAAGS,WAAT,IAAwBR,IAAnC;AACH;;AAED,QAAMc,GAAG,GAAGF,aAAa,GAAGZ,IAA5B;AACA,QAAMe,GAAG,GAAG,EAAE,CAACN,YAAY,GAAGG,aAAhB,IAAiCZ,IAAnC,CAAZ;AAEA,QAAMgB,CAAC,GAAGtB,eAAe,CAAC,MAAM;AAC5B,UAAM;AAAEuB,MAAAA,aAAF;AAAiBC,MAAAA;AAAjB,QAAmCrB,aAAa,CAACsB,KAAvD;;AACA,QACI,CAACpB,KAAK,GAAGkB,aAAa,CAAC,CAAD,CAArB,IAA4BlB,KAAK,GAAGkB,aAAa,CAAC,CAAD,CAAlD,MACClB,KAAK,GAAGmB,aAAa,CAAC,CAAD,CAArB,IAA4BnB,KAAK,GAAGmB,aAAa,CAAC,CAAD,CADlD,CADJ,EAGE;AACE,aAAOE,MAAM,CAACC,gBAAd;AACH;;AAED,QAAIpB,IAAJ,EAAU;AACN,YAAMqB,UAAU,GAAG,CACf,CAACZ,WADc,EAEfK,GAAG,GAAGJ,UAAN,GAAmBE,QAAnB,GAA8BO,MAAM,CAACG,SAFtB,EAGfR,GAAG,GAAGJ,UAAN,GAAmBE,QAHJ,EAIf,CAJe,EAKfC,GAAG,GAAGH,UAAN,GAAmBE,QALJ,EAMfC,GAAG,GAAGH,UAAN,GAAmBE,QAAnB,GAA8BO,MAAM,CAACG,SANtB,EAOfb,WAPe,CAAnB;AAUA,YAAMc,WAAW,GAAG,CAChBX,QADgB,EAEhBC,GAAG,GAAGH,UAAN,GAAmBS,MAAM,CAACG,SAFV,EAGhBR,GAAG,GAAGJ,UAHU,EAIhBE,QAJgB,EAKhBC,GAAG,GAAGH,UALU,EAMhBI,GAAG,GAAGJ,UAAN,GAAmBS,MAAM,CAACG,SANV,EAOhBV,QAPgB,CAApB;AAUA,aAAOpB,WAAW,CACdK,aAAa,CAACqB,KADA,EAEdG,UAFc,EAGdE,WAHc,EAIdhC,WAAW,CAACiC,KAJE,CAAlB;AAMH;;AAED,WAAO3B,aAAa,CAACqB,KAAd,GAAsBnB,IAAI,GAAGD,KAApC;AACH,GAvCwB,EAuCtB,CAACE,IAAD,EAAOC,IAAP,EAAaE,SAAb,EAAwBD,IAAxB,EAA8BH,IAA9B,EAAoCH,aAApC,CAvCsB,CAAzB;AAyCA,SAAOmB,CAAP;AACH,CArEM","sourcesContent":["import Animated, {\n Extrapolate,\n interpolate,\n useDerivedValue,\n} from 'react-native-reanimated';\nimport type { IVisibleRanges } from './useVisibleRanges';\n\nexport interface IOpts {\n index: number;\n size: number;\n handlerOffset: Animated.SharedValue<number>;\n data: unknown[];\n type?: 'positive' | 'negative';\n viewCount?: number;\n loop?: boolean;\n}\n\nexport const useOffsetX = (opts: IOpts, visibleRanges: IVisibleRanges) => {\n const {\n handlerOffset,\n index,\n size,\n loop,\n data,\n type = 'positive',\n viewCount = Math.round((data.length - 1) / 2),\n } = opts;\n\n const ITEM_LENGTH = data.length;\n const VALID_LENGTH = ITEM_LENGTH - 1;\n const TOTAL_WIDTH = size * ITEM_LENGTH;\n const HALF_WIDTH = 0.5 * size;\n\n const positiveCount =\n type === 'positive' ? viewCount : VALID_LENGTH - viewCount;\n\n let startPos = size * index;\n if (index > positiveCount) {\n startPos = (index - ITEM_LENGTH) * size;\n }\n\n const MAX = positiveCount * size;\n const MIN = -((VALID_LENGTH - positiveCount) * size);\n\n const x = useDerivedValue(() => {\n const { negativeRange, positiveRange } = visibleRanges.value;\n if (\n (index < negativeRange[0] || index > negativeRange[1]) &&\n (index < positiveRange[0] || index > positiveRange[1])\n ) {\n return Number.MAX_SAFE_INTEGER;\n }\n\n if (loop) {\n const inputRange = [\n -TOTAL_WIDTH,\n MIN - HALF_WIDTH - startPos - Number.MIN_VALUE,\n MIN - HALF_WIDTH - startPos,\n 0,\n MAX + HALF_WIDTH - startPos,\n MAX + HALF_WIDTH - startPos + Number.MIN_VALUE,\n TOTAL_WIDTH,\n ];\n\n const outputRange = [\n startPos,\n MAX + HALF_WIDTH - Number.MIN_VALUE,\n MIN - HALF_WIDTH,\n startPos,\n MAX + HALF_WIDTH,\n MIN - HALF_WIDTH + Number.MIN_VALUE,\n startPos,\n ];\n\n return interpolate(\n handlerOffset.value,\n inputRange,\n outputRange,\n Extrapolate.CLAMP\n );\n }\n\n return handlerOffset.value + size * index;\n }, [loop, data, viewCount, type, size, visibleRanges]);\n\n return x;\n};\n"]}
|
|
@@ -7,7 +7,7 @@ import { CTX } from '../store';
|
|
|
7
7
|
export const BaseLayout = props => {
|
|
8
8
|
const mounted = useCheckMounted();
|
|
9
9
|
const {
|
|
10
|
-
|
|
10
|
+
handlerOffset,
|
|
11
11
|
index,
|
|
12
12
|
children,
|
|
13
13
|
visibleRanges,
|
|
@@ -29,7 +29,7 @@ export const BaseLayout = props => {
|
|
|
29
29
|
const size = vertical ? height : width;
|
|
30
30
|
const [shouldUpdate, setShouldUpdate] = React.useState(false);
|
|
31
31
|
let offsetXConfig = {
|
|
32
|
-
|
|
32
|
+
handlerOffset: handlerOffset,
|
|
33
33
|
index,
|
|
34
34
|
size,
|
|
35
35
|
data,
|
|
@@ -43,7 +43,7 @@ export const BaseLayout = props => {
|
|
|
43
43
|
showLength
|
|
44
44
|
} = modeConfig;
|
|
45
45
|
offsetXConfig = {
|
|
46
|
-
|
|
46
|
+
handlerOffset: handlerOffset,
|
|
47
47
|
index,
|
|
48
48
|
size,
|
|
49
49
|
data,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["BaseLayout.tsx"],"names":["React","Animated","runOnJS","useAnimatedReaction","useAnimatedStyle","useDerivedValue","useCheckMounted","useOffsetX","LazyView","CTX","BaseLayout","props","mounted","
|
|
1
|
+
{"version":3,"sources":["BaseLayout.tsx"],"names":["React","Animated","runOnJS","useAnimatedReaction","useAnimatedStyle","useDerivedValue","useCheckMounted","useOffsetX","LazyView","CTX","BaseLayout","props","mounted","handlerOffset","index","children","visibleRanges","animationStyle","context","useContext","loop","data","width","height","vertical","customConfig","mode","modeConfig","size","shouldUpdate","setShouldUpdate","useState","offsetXConfig","snapDirection","showLength","type","viewCount","x","animationValue","value","animatedStyle","updateView","useCallback","negativeRange","positiveRange","current","position"],"mappings":"AAAA,OAAOA,KAAP,MAAkB,OAAlB;AAEA,OAAOC,QAAP,IAEIC,OAFJ,EAGIC,mBAHJ,EAIIC,gBAJJ,EAKIC,eALJ,QAMO,yBANP;AAOA,SAASC,eAAT,QAAgC,0BAAhC;AACA,SAAgBC,UAAhB,QAAkC,qBAAlC;AAEA,SAASC,QAAT,QAAyB,aAAzB;AACA,SAASC,GAAT,QAAoB,UAApB;AAKA,OAAO,MAAMC,UAQX,GAAIC,KAAD,IAAW;AACZ,QAAMC,OAAO,GAAGN,eAAe,EAA/B;AACA,QAAM;AAAEO,IAAAA,aAAF;AAAiBC,IAAAA,KAAjB;AAAwBC,IAAAA,QAAxB;AAAkCC,IAAAA,aAAlC;AAAiDC,IAAAA;AAAjD,MACFN,KADJ;AAGA,QAAMO,OAAO,GAAGlB,KAAK,CAACmB,UAAN,CAAiBV,GAAjB,CAAhB;AACA,QAAM;AACFE,IAAAA,KAAK,EAAE;AACHS,MAAAA,IADG;AAEHC,MAAAA,IAFG;AAGHC,MAAAA,KAHG;AAIHC,MAAAA,MAJG;AAKHC,MAAAA,QALG;AAMHC,MAAAA,YANG;AAOHC,MAAAA,IAPG;AAQHC,MAAAA;AARG;AADL,MAWFT,OAXJ;AAYA,QAAMU,IAAI,GAAGJ,QAAQ,GAAGD,MAAH,GAAYD,KAAjC;AACA,QAAM,CAACO,YAAD,EAAeC,eAAf,IAAkC9B,KAAK,CAAC+B,QAAN,CAAe,KAAf,CAAxC;AACA,MAAIC,aAAoB,GAAG;AACvBnB,IAAAA,aAAa,EAAEA,aADQ;AAEvBC,IAAAA,KAFuB;AAGvBc,IAAAA,IAHuB;AAIvBP,IAAAA,IAJuB;AAKvBD,IAAAA,IALuB;AAMvB,QAAI,OAAOK,YAAP,KAAwB,UAAxB,GAAqCA,YAAY,EAAjD,GAAsD,EAA1D;AANuB,GAA3B;;AASA,MAAIC,IAAI,KAAK,kBAAb,EAAiC;AAC7B,UAAM;AAAEO,MAAAA,aAAF;AAAiBC,MAAAA;AAAjB,QAAgCP,UAAtC;AAEAK,IAAAA,aAAa,GAAG;AACZnB,MAAAA,aAAa,EAAEA,aADH;AAEZC,MAAAA,KAFY;AAGZc,MAAAA,IAHY;AAIZP,MAAAA,IAJY;AAKZD,MAAAA,IALY;AAMZe,MAAAA,IAAI,EAAEF,aAAa,KAAK,OAAlB,GAA4B,UAA5B,GAAyC,UANnC;AAOZG,MAAAA,SAAS,EAAEF;AAPC,KAAhB;AASH;;AAED,QAAMG,CAAC,GAAG9B,UAAU,CAACyB,aAAD,EAAgBhB,aAAhB,CAApB;AACA,QAAMsB,cAAc,GAAGjC,eAAe,CAAC,MAAMgC,CAAC,CAACE,KAAF,GAAUX,IAAjB,EAAuB,CAACS,CAAD,EAAIT,IAAJ,CAAvB,CAAtC;AACA,QAAMY,aAAa,GAAGpC,gBAAgB,EAClC;AACA,QAAMa,cAAc,CAACoB,CAAC,CAACE,KAAF,GAAUX,IAAX,CAFc,EAGlC,CAACX,cAAD,CAHkC,CAAtC;AAMA,QAAMwB,UAAU,GAAGzC,KAAK,CAAC0C,WAAN,CACf,CAACC,aAAD,EAA0BC,aAA1B,KAAsD;AAClDhC,IAAAA,OAAO,CAACiC,OAAR,IACIf,eAAe,CACVhB,KAAK,IAAI6B,aAAa,CAAC,CAAD,CAAtB,IAA6B7B,KAAK,IAAI6B,aAAa,CAAC,CAAD,CAApD,IACK7B,KAAK,IAAI8B,aAAa,CAAC,CAAD,CAAtB,IAA6B9B,KAAK,IAAI8B,aAAa,CAAC,CAAD,CAF7C,CADnB;AAKH,GAPc,EAQf,CAAC9B,KAAD,EAAQF,OAAR,CARe,CAAnB;AAWAT,EAAAA,mBAAmB,CACf,MAAMa,aAAa,CAACuB,KADL,EAEf,MAAM;AACFrC,IAAAA,OAAO,CAACuC,UAAD,CAAP,CACIzB,aAAa,CAACuB,KAAd,CAAoBI,aADxB,EAEI3B,aAAa,CAACuB,KAAd,CAAoBK,aAFxB;AAIH,GAPc,EAQf,CAAC5B,aAAa,CAACuB,KAAf,CARe,CAAnB;AAWA,sBACI,oBAAC,QAAD,CAAU,IAAV;AACI,IAAA,KAAK,EAAE,CACH;AACIjB,MAAAA,KAAK,EAAEA,KAAK,IAAI,MADpB;AAEIC,MAAAA,MAAM,EAAEA,MAAM,IAAI,MAFtB;AAGIuB,MAAAA,QAAQ,EAAE;AAHd,KADG,EAMHN,aANG;AADX,kBAUI,oBAAC,QAAD;AAAU,IAAA,YAAY,EAAEX;AAAxB,KACKd,QAAQ,CAAC;AAAEuB,IAAAA;AAAF,GAAD,CADb,CAVJ,CADJ;AAgBH,CAjGM","sourcesContent":["import React from 'react';\nimport type { ViewStyle } from 'react-native';\nimport Animated, {\n AnimatedStyleProp,\n runOnJS,\n useAnimatedReaction,\n useAnimatedStyle,\n useDerivedValue,\n} from 'react-native-reanimated';\nimport { useCheckMounted } from '../hooks/useCheckMounted';\nimport { IOpts, useOffsetX } from '../hooks/useOffsetX';\nimport type { IVisibleRanges } from '../hooks/useVisibleRanges';\nimport { LazyView } from '../LazyView';\nimport { CTX } from '../store';\nimport type { ILayoutConfig } from './stack';\n\nexport type TAnimationStyle = (value: number) => AnimatedStyleProp<ViewStyle>;\n\nexport const BaseLayout: React.FC<{\n index: number;\n handlerOffset: Animated.SharedValue<number>;\n visibleRanges: IVisibleRanges;\n animationStyle: TAnimationStyle;\n children: (ctx: {\n animationValue: Animated.SharedValue<number>;\n }) => React.ReactElement;\n}> = (props) => {\n const mounted = useCheckMounted();\n const { handlerOffset, index, children, visibleRanges, animationStyle } =\n props;\n\n const context = React.useContext(CTX);\n const {\n props: {\n loop,\n data,\n width,\n height,\n vertical,\n customConfig,\n mode,\n modeConfig,\n },\n } = context;\n const size = vertical ? height : width;\n const [shouldUpdate, setShouldUpdate] = React.useState(false);\n let offsetXConfig: IOpts = {\n handlerOffset: handlerOffset,\n index,\n size,\n data,\n loop,\n ...(typeof customConfig === 'function' ? customConfig() : {}),\n };\n\n if (mode === 'horizontal-stack') {\n const { snapDirection, showLength } = modeConfig as ILayoutConfig;\n\n offsetXConfig = {\n handlerOffset: handlerOffset,\n index,\n size,\n data,\n loop,\n type: snapDirection === 'right' ? 'negative' : 'positive',\n viewCount: showLength,\n };\n }\n\n const x = useOffsetX(offsetXConfig, visibleRanges);\n const animationValue = useDerivedValue(() => x.value / size, [x, size]);\n const animatedStyle = useAnimatedStyle(\n // @ts-ignore\n () => animationStyle(x.value / size),\n [animationStyle]\n );\n\n const updateView = React.useCallback(\n (negativeRange: number[], positiveRange: number[]) => {\n mounted.current &&\n setShouldUpdate(\n (index >= negativeRange[0] && index <= negativeRange[1]) ||\n (index >= positiveRange[0] && index <= positiveRange[1])\n );\n },\n [index, mounted]\n );\n\n useAnimatedReaction(\n () => visibleRanges.value,\n () => {\n runOnJS(updateView)(\n visibleRanges.value.negativeRange,\n visibleRanges.value.positiveRange\n );\n },\n [visibleRanges.value]\n );\n\n return (\n <Animated.View\n style={[\n {\n width: width || '100%',\n height: height || '100%',\n position: 'absolute',\n },\n animatedStyle,\n ]}\n >\n <LazyView shouldUpdate={shouldUpdate}>\n {children({ animationValue })}\n </LazyView>\n </Animated.View>\n );\n};\n"]}
|
|
@@ -4,7 +4,7 @@ import { useOffsetX } from '../hooks/useOffsetX';
|
|
|
4
4
|
import { LazyView } from '../LazyView';
|
|
5
5
|
export const ParallaxLayout = props => {
|
|
6
6
|
const {
|
|
7
|
-
|
|
7
|
+
handlerOffset,
|
|
8
8
|
parallaxScrollingOffset = 100,
|
|
9
9
|
parallaxScrollingScale = 0.8,
|
|
10
10
|
parallaxAdjacentItemScale = Math.pow(parallaxScrollingScale, 2),
|
|
@@ -20,7 +20,7 @@ export const ParallaxLayout = props => {
|
|
|
20
20
|
const [shouldUpdate, setShouldUpdate] = React.useState(false);
|
|
21
21
|
const size = props.vertical ? props.height : props.width;
|
|
22
22
|
const x = useOffsetX({
|
|
23
|
-
|
|
23
|
+
handlerOffset: handlerOffset,
|
|
24
24
|
index,
|
|
25
25
|
size,
|
|
26
26
|
data,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["ParallaxLayout.tsx"],"names":["React","Animated","Extrapolate","interpolate","runOnJS","useAnimatedReaction","useAnimatedStyle","useOffsetX","LazyView","ParallaxLayout","props","
|
|
1
|
+
{"version":3,"sources":["ParallaxLayout.tsx"],"names":["React","Animated","Extrapolate","interpolate","runOnJS","useAnimatedReaction","useAnimatedStyle","useOffsetX","LazyView","ParallaxLayout","props","handlerOffset","parallaxScrollingOffset","parallaxScrollingScale","parallaxAdjacentItemScale","Math","pow","index","width","height","loop","data","children","visibleRanges","vertical","shouldUpdate","setShouldUpdate","useState","size","x","offsetXStyle","value","translate","EXTEND","zIndex","CLAMP","scale","transform","translateY","translateX","updateView","useCallback","negativeRange","positiveRange","position"],"mappings":"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","sourcesContent":["import React from 'react';\nimport Animated, {\n Extrapolate,\n interpolate,\n runOnJS,\n useAnimatedReaction,\n useAnimatedStyle,\n} from 'react-native-reanimated';\nimport type { IComputedDirectionTypes } from '../types';\nimport { useOffsetX } from '../hooks/useOffsetX';\nimport type { IVisibleRanges } from '../hooks/useVisibleRanges';\nimport { LazyView } from '../LazyView';\nimport type { ILayoutConfig } from './parallax';\n\nexport const ParallaxLayout: React.FC<\n IComputedDirectionTypes<\n {\n loop?: boolean;\n handlerOffset: Animated.SharedValue<number>;\n index: number;\n data: unknown[];\n visibleRanges: IVisibleRanges;\n } & ILayoutConfig\n >\n> = (props) => {\n const {\n handlerOffset,\n parallaxScrollingOffset = 100,\n parallaxScrollingScale = 0.8,\n parallaxAdjacentItemScale = Math.pow(parallaxScrollingScale, 2),\n index,\n width,\n height,\n loop,\n data,\n children,\n visibleRanges,\n vertical,\n } = props;\n\n const [shouldUpdate, setShouldUpdate] = React.useState(false);\n\n const size = props.vertical ? props.height : props.width;\n\n const x = useOffsetX(\n {\n handlerOffset: handlerOffset,\n index,\n size,\n data,\n loop,\n },\n visibleRanges\n );\n\n const offsetXStyle = useAnimatedStyle(() => {\n const value = x.value / size;\n\n const translate = interpolate(\n value,\n [-1, 0, 1],\n [\n -size + parallaxScrollingOffset,\n 0,\n size - parallaxScrollingOffset,\n ],\n Extrapolate.EXTEND\n );\n\n const zIndex = interpolate(\n value,\n [-1, 0, 1],\n [0, size, 0],\n Extrapolate.CLAMP\n );\n\n const scale = interpolate(\n value,\n [-1, 0, 1],\n [\n parallaxAdjacentItemScale,\n parallaxScrollingScale,\n parallaxAdjacentItemScale,\n ],\n Extrapolate.CLAMP\n );\n\n return {\n transform: [\n vertical\n ? {\n translateY: translate,\n }\n : {\n translateX: translate,\n },\n {\n scale,\n },\n ],\n zIndex,\n };\n }, [loop, vertical, parallaxScrollingOffset]);\n\n const updateView = React.useCallback(\n (negativeRange: number[], positiveRange: number[]) => {\n setShouldUpdate(\n (index >= negativeRange[0] && index <= negativeRange[1]) ||\n (index >= positiveRange[0] && index <= positiveRange[1])\n );\n },\n [index]\n );\n\n useAnimatedReaction(\n () => visibleRanges.value,\n () => {\n runOnJS(updateView)(\n visibleRanges.value.negativeRange,\n visibleRanges.value.positiveRange\n );\n },\n [visibleRanges.value]\n );\n\n return (\n <Animated.View\n style={[\n {\n width: width || '100%',\n height: height || '100%',\n position: 'absolute',\n },\n offsetXStyle,\n ]}\n >\n <LazyView shouldUpdate={shouldUpdate}>{children}</LazyView>\n </Animated.View>\n );\n};\n"]}
|
|
@@ -5,7 +5,7 @@ interface IOpts {
|
|
|
5
5
|
size: number;
|
|
6
6
|
data: TCarouselProps['data'];
|
|
7
7
|
autoFillData: TCarouselProps['autoFillData'];
|
|
8
|
-
|
|
8
|
+
handlerOffset: Animated.SharedValue<number>;
|
|
9
9
|
withAnimation?: TCarouselProps['withAnimation'];
|
|
10
10
|
duration?: number;
|
|
11
11
|
defaultIndex?: number;
|
|
@@ -3,7 +3,7 @@ import type { TInitializeCarouselProps } from './useInitProps';
|
|
|
3
3
|
interface ICommonVariables {
|
|
4
4
|
size: number;
|
|
5
5
|
validLength: number;
|
|
6
|
-
|
|
6
|
+
handlerOffset: Animated.SharedValue<number>;
|
|
7
7
|
}
|
|
8
8
|
export declare function useCommonVariables(props: TInitializeCarouselProps<any>): ICommonVariables;
|
|
9
9
|
export {};
|
|
@@ -3,7 +3,7 @@ import type { IVisibleRanges } from './useVisibleRanges';
|
|
|
3
3
|
export interface IOpts {
|
|
4
4
|
index: number;
|
|
5
5
|
size: number;
|
|
6
|
-
|
|
6
|
+
handlerOffset: Animated.SharedValue<number>;
|
|
7
7
|
data: unknown[];
|
|
8
8
|
type?: 'positive' | 'negative';
|
|
9
9
|
viewCount?: number;
|
|
@@ -5,7 +5,7 @@ import type { IVisibleRanges } from '../hooks/useVisibleRanges';
|
|
|
5
5
|
export declare type TAnimationStyle = (value: number) => AnimatedStyleProp<ViewStyle>;
|
|
6
6
|
export declare const BaseLayout: React.FC<{
|
|
7
7
|
index: number;
|
|
8
|
-
|
|
8
|
+
handlerOffset: Animated.SharedValue<number>;
|
|
9
9
|
visibleRanges: IVisibleRanges;
|
|
10
10
|
animationStyle: TAnimationStyle;
|
|
11
11
|
children: (ctx: {
|
|
@@ -5,7 +5,7 @@ import type { IVisibleRanges } from '../hooks/useVisibleRanges';
|
|
|
5
5
|
import type { ILayoutConfig } from './parallax';
|
|
6
6
|
export declare const ParallaxLayout: React.FC<IComputedDirectionTypes<{
|
|
7
7
|
loop?: boolean;
|
|
8
|
-
|
|
8
|
+
handlerOffset: Animated.SharedValue<number>;
|
|
9
9
|
index: number;
|
|
10
10
|
data: unknown[];
|
|
11
11
|
visibleRanges: IVisibleRanges;
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
/// <reference types="react" />
|
|
2
2
|
import type { StyleProp, ViewStyle } from 'react-native';
|
|
3
3
|
import type { PanGestureHandlerProps } from 'react-native-gesture-handler';
|
|
4
|
-
import type { AnimatedStyleProp, WithSpringConfig, WithTimingConfig } from 'react-native-reanimated';
|
|
4
|
+
import type { AnimatedStyleProp, SharedValue, WithSpringConfig, WithTimingConfig } from 'react-native-reanimated';
|
|
5
5
|
import type Animated from 'react-native-reanimated';
|
|
6
6
|
import type { TParallaxModeProps } from './layouts/parallax';
|
|
7
7
|
import type { TStackModeProps } from './layouts/stack';
|
|
@@ -47,6 +47,10 @@ export declare type WithTimingAnimation = {
|
|
|
47
47
|
export declare type WithAnimation = WithSpringAnimation | WithTimingAnimation;
|
|
48
48
|
export declare type TCarouselProps<T = any> = {
|
|
49
49
|
ref?: React.Ref<ICarouselInstance>;
|
|
50
|
+
/**
|
|
51
|
+
* The default animated value of the carousel.
|
|
52
|
+
*/
|
|
53
|
+
defaultScrollOffsetValue?: SharedValue<number>;
|
|
50
54
|
/**
|
|
51
55
|
* Carousel loop playback.
|
|
52
56
|
* @default true
|
|
@@ -147,7 +151,7 @@ export declare type TCarouselProps<T = any> = {
|
|
|
147
151
|
*/
|
|
148
152
|
renderItem: CarouselRenderItem<T>;
|
|
149
153
|
/**
|
|
150
|
-
* Callback fired when navigating to an item
|
|
154
|
+
* Callback fired when navigating to an item.
|
|
151
155
|
*/
|
|
152
156
|
onSnapToItem?: (index: number) => void;
|
|
153
157
|
/**
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "react-native-reanimated-carousel",
|
|
3
|
-
"version": "3.0
|
|
3
|
+
"version": "3.1.0",
|
|
4
4
|
"description": "Simple carousel component.fully implemented using Reanimated 2.Infinitely scrolling, very smooth.",
|
|
5
5
|
"main": "lib/commonjs/index",
|
|
6
6
|
"react-native": "src/index.tsx",
|