1 | import { ComponentType } from 'react'
|
2 | import { StandardProps, CommonEventFunction } from './common'
|
3 | interface SwiperProps extends StandardProps {
|
4 | /** 是否显示面板指示点
|
5 | * @default false
|
6 | * @supported weapp, alipay, swan, tt, qq, jd, h5, rn, harmony, harmony_hybrid
|
7 | */
|
8 | indicatorDots?: boolean
|
9 | /** 指示点颜色
|
10 | * @default "rgba(0, 0, 0, .3)"
|
11 | * @supported weapp, alipay, swan, tt, qq, jd, h5, rn, harmony, harmony_hybrid
|
12 | */
|
13 | indicatorColor?: string
|
14 | /** 当前选中的指示点颜色
|
15 | * @default "#000000"
|
16 | * @supported weapp, alipay, swan, tt, qq, jd, h5, rn, harmony, harmony_hybrid
|
17 | */
|
18 | indicatorActiveColor?: string
|
19 | /** 是否自动切换
|
20 | * @default false
|
21 | * @supported weapp, alipay, swan, tt, qq, jd, h5, rn, harmony, harmony_hybrid
|
22 | */
|
23 | autoplay?: boolean
|
24 | /** 当前所在滑块的 index
|
25 | * @default 0
|
26 | * @supported weapp, alipay, swan, tt, qq, jd, h5, rn, harmony, harmony_hybrid
|
27 | */
|
28 | current?: number
|
29 | /** 当前所在滑块的 item-id ,不能与 current 被同时指定
|
30 | * @supported swan, tt, qq, jd, h5, harmony_hybrid
|
31 | * @weapp deprecated
|
32 | * @default ""
|
33 | */
|
34 | currentItemId?: string
|
35 | /** 自动切换时间间隔
|
36 | * @default 5000
|
37 | * @supported weapp, alipay, swan, tt, qq, jd, h5, rn, harmony, harmony_hybrid
|
38 | */
|
39 | interval?: number
|
40 | /** 滑动动画时长
|
41 | * @default 500
|
42 | * @supported weapp, alipay, swan, tt, qq, jd, h5, harmony, harmony_hybrid
|
43 | */
|
44 | duration?: number
|
45 | /** 是否采用衔接滑动
|
46 | * @default false
|
47 | * @supported weapp, alipay, swan, tt, qq, jd, h5, rn, harmony_hybrid
|
48 | */
|
49 | circular?: boolean
|
50 | /** 滑动方向是否为纵向
|
51 | * @default false
|
52 | * @supported weapp, alipay, swan, tt, qq, jd, h5, rn, harmony, harmony_hybrid
|
53 | */
|
54 | vertical?: boolean
|
55 | /** 前边距,可用于露出前一项的一小部分,接受 px 和 rpx 值
|
56 | * @default "0px"
|
57 | * @supported weapp, alipay, swan, tt, qq, jd, h5, harmony_hybrid
|
58 | */
|
59 | previousMargin?: string
|
60 | /** 后边距,可用于露出后一项的一小部分,接受 px 和 rpx 值
|
61 | * @default "0px"
|
62 | * @supported weapp, alipay, swan, tt, qq, jd, h5, harmony_hybrid
|
63 | */
|
64 | nextMargin?: string
|
65 | /**
|
66 | * 当 swiper-item 的个数大于等于 2,关闭 circular 并且开启 previous-margin 或 next-margin 的时候,可以指定这个边距是否应用到第一个、最后一个元素
|
67 | * @default false
|
68 | * @supported weapp, alipay
|
69 | */
|
70 | snapToEdge?: boolean
|
71 | /** 同时显示的滑块数量
|
72 | * @default 1
|
73 | * @supported weapp, alipay, swan, tt, qq, jd, h5, harmony_hybrid
|
74 | */
|
75 | displayMultipleItems?: number
|
76 | /** 是否跳过未显示的滑块布局,设为 true 可优化复杂情况下的滑动性能,但会丢失隐藏状态滑块的布局信息
|
77 | * @default false
|
78 | * @supported qq, jd
|
79 | */
|
80 | skipHiddenItemLayout?: boolean
|
81 | /** 指定 swiper 切换缓动动画类型
|
82 | * @default "default"
|
83 | * @supported weapp, alipay, tt, jd
|
84 | */
|
85 | easingFunction?: keyof SwiperProps.TEasingFunction
|
86 | /** 是否禁止用户 touch 操作
|
87 | * @default false
|
88 | * @supported alipay
|
89 | */
|
90 | disableTouch?: boolean
|
91 | /** 是否启用缩放
|
92 | * @default false
|
93 | * @supported h5, harmony_hybrid
|
94 | */
|
95 | zoom?: boolean
|
96 | /** 是否开启全屏
|
97 | * @default false
|
98 | * @supported h5, harmony_hybrid
|
99 | */
|
100 | full?: boolean
|
101 | /** swiper-item 可见时的 class。
|
102 | * @supported alipay
|
103 | */
|
104 | activeClass?: string
|
105 | /** acceleration 设置为 {{true}} 时且处于滑动过程中,中间若干屏处于可见时的 class。
|
106 | * @supported alipay
|
107 | */
|
108 | changingClass?: string
|
109 | /** 当开启时,会根据滑动速度,连续滑动多屏。
|
110 | * @default false
|
111 | * @supported alipay
|
112 | */
|
113 | acceleration?: string
|
114 | /** 是否禁用代码变动触发 swiper 切换时使用动画。
|
115 | * @default false
|
116 | * @supported alipay
|
117 | */
|
118 | disableProgrammaticAnimation?: string
|
119 | /** 滑动距离阈值,当滑动距离超过阈值时进行 swiper-item 切换。
|
120 | * @supported alipay
|
121 | */
|
122 | swipeRatio?: string
|
123 | /** 滑动综合速度阈值,当超过阈值时进行 swiper-item 切换,数值越小越敏感。
|
124 | * @supported alipay
|
125 | */
|
126 | swipeSpeed?: string
|
127 | /** 计算用户手势时所依赖的滑动角度。角度根据 touchstart 事件和首次 touchmove 事件的坐标计算得出。数值越小越对用户的滑动方向准确度要求越高。
|
128 | * @supported alipay
|
129 | */
|
130 | touchAngle?: string
|
131 | /** 自动以指定滑块的高度为整个容器的高度。当 vertical 为 true 时,默认不调整。可选值为:
|
132 | * @supported alipay
|
133 | */
|
134 | adjustHeight?: 'first' | 'current' | 'highest' | 'none'
|
135 | /** vertical 为 true 时强制使 adjust-height 生效。
|
136 | * @supported alipay
|
137 | */
|
138 | adjustVerticalHeight?: string
|
139 | /** 是否停止响应用户 touchmove 操作
|
140 | * @default false
|
141 | * @supported swan
|
142 | */
|
143 | disableTouchmove?: string
|
144 | /** swiper11 相关的动效参数,具体见文档 https://swiperjs.com/swiper-api#parameters
|
145 | * @supported h5
|
146 | */
|
147 | effectsProps?: Record<string, any>
|
148 | /** current 改变时会触发 change 事件
|
149 | * @supported weapp, alipay, swan, tt, qq, jd, h5, rn, harmony, harmony_hybrid
|
150 | */
|
151 | onChange?: CommonEventFunction<SwiperProps.onChangeEventDetail>
|
152 | /** swiper-item 的位置发生改变时会触发 transition 事件
|
153 | * @supported weapp, alipay, tt, qq
|
154 | */
|
155 | onTransition?: CommonEventFunction<SwiperProps.onTransitionEventDetail>
|
156 | /** 动画结束时会触发 animationfinish 事件
|
157 | * @supported weapp, swan, tt, qq, jd, h5, rn, harmony_hybrid
|
158 | */
|
159 | onAnimationFinish?: SwiperProps['onChange']
|
160 | /** 动画结束时会触发 animationEnd 事件
|
161 | * @supported alipay
|
162 | */
|
163 | onAnimationEnd?: CommonEventFunction<SwiperProps.onCommonEventDetail>
|
164 | /** 渲染模式
|
165 | * @supported weapp
|
166 | * @default normal
|
167 | */
|
168 | layoutType?: 'normal' | 'stackLeft' | 'stackRight' | 'tinder' | 'transformer'
|
169 | /** layout-type 为 transformer 时指定动画类型
|
170 | * @supported weapp
|
171 | * @default scaleAndFade
|
172 | */
|
173 | transformerType?: 'scaleAndFade' | 'accordion' | 'threeD' | 'zoomIn' | 'zoomOut' | 'deepthPage'
|
174 | /** 指示点动画类型
|
175 | * @supported weapp
|
176 | * @default normal
|
177 | */
|
178 | indicatorType?: 'normal' | 'worm' | 'wormThin' | 'wormUnderground' | 'wormThinUnderground' | 'expand' | 'jump' | 'jumpWithOffset' | 'scroll' | 'scrollFixedCenter' | 'slide' | 'slideUnderground' | 'scale' | 'swap' | 'swapYRotation' | 'color'
|
179 | /** 指示点四周边距
|
180 | * @supported weapp
|
181 | * @default 10
|
182 | */
|
183 | indicatorMargin?: number
|
184 | /** 指示点间距
|
185 | * @supported weapp
|
186 | * @default 4
|
187 | */
|
188 | indicatorSpacing?: number
|
189 | /** 指示点圆角大小
|
190 | * @supported weapp
|
191 | * @default 4
|
192 | */
|
193 | indicatorRadius?: number
|
194 | /** 指示点宽度
|
195 | * @supported weapp
|
196 | * @default 8
|
197 | */
|
198 | indicatorWidth?: number
|
199 | /** 指示点高度
|
200 | * @supported weapp
|
201 | * @default 8
|
202 | */
|
203 | indicatorHeight?: number
|
204 | /** 指示点的相对位置
|
205 | * @supported weapp
|
206 | * @default auto
|
207 | */
|
208 | indicatorAlignment?: [number, number] | string
|
209 | /** 指示点位置的偏移量
|
210 | * @supported weapp
|
211 | * @default [0, 0]
|
212 | */
|
213 | indicatorOffset?: [number, number]
|
214 | /** 改变 current 时使用动画过渡
|
215 | * @supported weapp
|
216 | * @default true
|
217 | */
|
218 | scrollWithAnimation?: boolean
|
219 | /** 缓存区域大小,值为 1 表示提前渲染上下各一屏区域(swiper 容器大小)
|
220 | * @supported weapp
|
221 | * @default 0
|
222 | */
|
223 | cacheExtent?: number
|
224 | /** 滑动开始时触发,仅支持 worklet 作为回调。event.detail = {dx: dx, dy: dy}
|
225 | * @supported weapp
|
226 | */
|
227 | onScrollStartWorklet?: string
|
228 | /** 滑动位置更新时触发,仅支持 worklet 作为回调。event.detail = {dx: dx, dy: dy}
|
229 | * @supported weapp
|
230 | */
|
231 | onScrollUpdateWorklet?: string
|
232 | /** 滑动结束时触发,仅支持 worklet 作为回调。event.detail = {dx: dx, dy: dy}
|
233 | * @supported weapp
|
234 | */
|
235 | onScrollEndWorklet?: string
|
236 | }
|
237 | declare namespace SwiperProps {
|
238 | /** 导致变更的原因 */
|
239 | interface TChangeSource {
|
240 | /** 自动播放 */
|
241 | autoplay
|
242 | /** 用户划动 */
|
243 | touch
|
244 | /** 其它原因 */
|
245 | ''
|
246 | }
|
247 | /** 指定 swiper 切换缓动动画类型 */
|
248 | interface TEasingFunction {
|
249 | /** 默认缓动函数 */
|
250 | default
|
251 | /** 线性动画 */
|
252 | linear
|
253 | /** 缓入动画 */
|
254 | easeInCubic
|
255 | /** 缓出动画 */
|
256 | easeOutCubic
|
257 | /** 缓入缓出动画 */
|
258 | easeInOutCubic
|
259 | }
|
260 | interface onCommonEventDetail {
|
261 | /** 当前所在滑块的索引 */
|
262 | current: number
|
263 | /** 导致变更的原因 */
|
264 | source: keyof SwiperProps.TChangeSource
|
265 | }
|
266 | interface onChangeEventDetail {
|
267 | /** 当前所在滑块的索引 */
|
268 | current: number
|
269 | /** 导致变更的原因 */
|
270 | source: keyof SwiperProps.TChangeSource
|
271 | /** SwiperItem的itemId参数值 */
|
272 | currentItemId?: string
|
273 | }
|
274 | interface onTransitionEventDetail {
|
275 | /** X 坐标 */
|
276 | dx: number
|
277 | /** Y 坐标 */
|
278 | dy: number
|
279 | }
|
280 | }
|
281 | /** 滑块视图容器。其中只可放置 swiper-item 组件,否则会导致未定义的行为。
|
282 | * > 不要为 `SwiperItem` 设置 **style** 属性,可以通过 class 设置样式。[7147](https://github.com/NervJS/taro/issues/7147)
|
283 | * @classification viewContainer
|
284 | * @supported weapp, alipay, swan, tt, qq, jd, h5, rn, harmony, harmony_hybrid
|
285 | * @example_react
|
286 | * ```tsx
|
287 | * class App extends Component {
|
288 | * render () {
|
289 | * return (
|
290 | * <Swiper
|
291 | * className='test-h'
|
292 | * indicatorColor='#999'
|
293 | * indicatorActiveColor='#333'
|
294 | * vertical
|
295 | * circular
|
296 | * indicatorDots
|
297 | * autoplay>
|
298 | * <SwiperItem>
|
299 | * <View className='demo-text-1'>1</View>
|
300 | * </SwiperItem>
|
301 | * <SwiperItem>
|
302 | * <View className='demo-text-2'>2</View>
|
303 | * </SwiperItem>
|
304 | * <SwiperItem>
|
305 | * <View className='demo-text-3'>3</View>
|
306 | * </SwiperItem>
|
307 | * </Swiper>
|
308 | * )
|
309 | * }
|
310 | * }
|
311 | * ```
|
312 | * @example_vue
|
313 | * ```html
|
314 | * <template>
|
315 | * <swiper
|
316 | * class='test-h'
|
317 | * indicator-color='#999'
|
318 | * indicator-active-color='#333'
|
319 | * :vertical="true"
|
320 | * :circular="true"
|
321 | * :indicator-dots="true"
|
322 | * :autoplay="true"
|
323 | * >
|
324 | * <swiper-item>
|
325 | * <view class='demo-text-1'>1</view>
|
326 | * </swiper-item>
|
327 | * <swiper-item>
|
328 | * <view class='demo-text-2'>2</view>
|
329 | * </swiper-item>
|
330 | * <swiper-item>
|
331 | * <view class='demo-text-3'>3</view>
|
332 | * </swiper-item>
|
333 | * </swiper>
|
334 | * </template>
|
335 | * ```
|
336 | * @see https://developers.weixin.qq.com/miniprogram/dev/component/swiper.html
|
337 | */
|
338 | declare const Swiper: ComponentType<SwiperProps>
|
339 | export { Swiper, SwiperProps }
|