@ray-js/smart-ui 2.13.1 → 2.13.2-beta-1
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/es/@types/config-provider/index.d.ts +7 -2
- package/es/@types/config-provider/theme-vars.d.ts +1 -1
- package/es/action-sheet/README.md +613 -0
- package/es/battery/README.md +149 -0
- package/es/bottom-sheet/README.md +495 -0
- package/es/button/README.md +335 -0
- package/es/calendar/README.md +513 -0
- package/es/cascader/README.md +326 -0
- package/es/cell/README.md +317 -0
- package/es/checkbox/README.md +481 -0
- package/es/circle/README.md +132 -0
- package/es/col/README.md +162 -0
- package/es/collapse/README.md +127 -0
- package/es/config-provider/README.md +150 -0
- package/es/count-down/README.md +201 -0
- package/es/custom-keyboard/README.md +122 -0
- package/es/datetime-picker/README.md +438 -0
- package/es/dialog/README.md +451 -0
- package/es/divider/README.md +132 -0
- package/es/dropdown-menu/README.md +331 -0
- package/es/empty/README.md +119 -0
- package/es/field/README.md +455 -0
- package/es/grid/README.md +273 -0
- package/es/icon/README.md +178 -0
- package/es/image/README.md +225 -0
- package/es/index-bar/README.md +186 -0
- package/es/loading/README.md +120 -0
- package/es/nav-bar/README.md +410 -0
- package/es/notice-bar/README.md +274 -0
- package/es/notify/README.md +121 -0
- package/es/overlay/README.md +128 -0
- package/es/picker/README.md +412 -0
- package/es/popover/README.md +338 -0
- package/es/popup/README.md +272 -0
- package/es/progress/README.md +88 -0
- package/es/radio/README.md +423 -0
- package/es/rate/README.md +248 -0
- package/es/search/README.md +290 -0
- package/es/sidebar/README.md +176 -0
- package/es/skeleton/README.md +141 -0
- package/es/slider/README.md +444 -0
- package/es/stepper/README.md +231 -0
- package/es/sticky/README.md +91 -0
- package/es/swipe-cell/README.md +217 -0
- package/es/switch/README.md +316 -0
- package/es/tab/README.md +501 -0
- package/es/tabbar/README.md +397 -0
- package/es/tag/README.md +215 -0
- package/es/toast/README.md +293 -0
- package/es/transition/README.md +140 -0
- package/es/tree-select/README.md +348 -0
- package/lib/@types/config-provider/index.d.ts +7 -2
- package/lib/@types/config-provider/theme-vars.d.ts +1 -1
- package/lib/action-sheet/README.md +613 -0
- package/lib/battery/README.md +149 -0
- package/lib/bottom-sheet/README.md +495 -0
- package/lib/button/README.md +335 -0
- package/lib/calendar/README.md +513 -0
- package/lib/cascader/README.md +326 -0
- package/lib/cell/README.md +317 -0
- package/lib/checkbox/README.md +481 -0
- package/lib/circle/README.md +132 -0
- package/lib/col/README.md +162 -0
- package/lib/collapse/README.md +127 -0
- package/lib/config-provider/README.md +150 -0
- package/lib/count-down/README.md +201 -0
- package/lib/custom-keyboard/README.md +122 -0
- package/lib/datetime-picker/README.md +438 -0
- package/lib/dialog/README.md +451 -0
- package/lib/divider/README.md +132 -0
- package/lib/dropdown-menu/README.md +331 -0
- package/lib/empty/README.md +119 -0
- package/lib/field/README.md +455 -0
- package/lib/grid/README.md +273 -0
- package/lib/icon/README.md +178 -0
- package/lib/image/README.md +225 -0
- package/lib/index-bar/README.md +186 -0
- package/lib/loading/README.md +120 -0
- package/lib/nav-bar/README.md +410 -0
- package/lib/notice-bar/README.md +274 -0
- package/lib/notify/README.md +121 -0
- package/lib/overlay/README.md +128 -0
- package/lib/picker/README.md +412 -0
- package/lib/popover/README.md +338 -0
- package/lib/popup/README.md +272 -0
- package/lib/progress/README.md +88 -0
- package/lib/radio/README.md +423 -0
- package/lib/rate/README.md +248 -0
- package/lib/search/README.md +290 -0
- package/lib/sidebar/README.md +176 -0
- package/lib/skeleton/README.md +141 -0
- package/lib/slider/README.md +444 -0
- package/lib/stepper/README.md +231 -0
- package/lib/sticky/README.md +91 -0
- package/lib/swipe-cell/README.md +217 -0
- package/lib/switch/README.md +316 -0
- package/lib/tab/README.md +501 -0
- package/lib/tabbar/README.md +397 -0
- package/lib/tag/README.md +215 -0
- package/lib/toast/README.md +293 -0
- package/lib/transition/README.md +140 -0
- package/lib/tree-select/README.md +348 -0
- package/package.json +3 -3
|
@@ -0,0 +1,444 @@
|
|
|
1
|
+
---
|
|
2
|
+
category: 数据录入
|
|
3
|
+
assets: LampTouchSlider,LampColorSlider,LampSaturationSlider,LampTempSlider,LampBrightSlider,LampStyleSlider,LampVerticalTouchSlider,LampVerticalPercentSlider,HighPerfText,CircleProgress
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
# Slider 滑动条
|
|
7
|
+
|
|
8
|
+
### 介绍
|
|
9
|
+
|
|
10
|
+
滑动条是代表模拟无线电调谐或音量控制表盘的 UI 组件。它允许用户从左到右滑动旋钮、手柄或栏,反之亦然。UI 滑动条非常适合用户快速同时探索许多不同的选项或值。最重要的是,当数量或值不需要精确时,它们对于用户来说是实用的组件。
|
|
11
|
+
|
|
12
|
+
### 引入
|
|
13
|
+
|
|
14
|
+
```jsx
|
|
15
|
+
import { Slider } from '@ray-js/smart-ui';
|
|
16
|
+
```
|
|
17
|
+
|
|
18
|
+
## 代码演示
|
|
19
|
+
|
|
20
|
+
### 普通滑动条
|
|
21
|
+
|
|
22
|
+
```jsx
|
|
23
|
+
import { Slider } from '@ray-js/smart-ui';
|
|
24
|
+
import React from 'react';
|
|
25
|
+
|
|
26
|
+
export default function Demo() {
|
|
27
|
+
const [value, setValue] = React.useState(30);
|
|
28
|
+
|
|
29
|
+
return (
|
|
30
|
+
<Slider
|
|
31
|
+
maxTrackHeight="4px"
|
|
32
|
+
minTrackHeight="4px"
|
|
33
|
+
thumbHeight="28px"
|
|
34
|
+
thumbWidth="28px"
|
|
35
|
+
value={value}
|
|
36
|
+
onAfterChange={value => setValue(value)}
|
|
37
|
+
/>
|
|
38
|
+
);
|
|
39
|
+
}
|
|
40
|
+
```
|
|
41
|
+
|
|
42
|
+
### 间隔滑动条
|
|
43
|
+
|
|
44
|
+
设置 `isShowTicks` 为 `true` ,可以展示出滑动间隔
|
|
45
|
+
|
|
46
|
+
```jsx
|
|
47
|
+
import { Slider } from '@ray-js/smart-ui';
|
|
48
|
+
import React from 'react';
|
|
49
|
+
|
|
50
|
+
export default function Demo() {
|
|
51
|
+
const [value, setValue] = React.useState(30);
|
|
52
|
+
|
|
53
|
+
return (
|
|
54
|
+
<Slider
|
|
55
|
+
value={value}
|
|
56
|
+
onAfterChange={value => setValue(value)}
|
|
57
|
+
maxTrackHeight={8}
|
|
58
|
+
minTrackHeight={8}
|
|
59
|
+
tickHeight="4px"
|
|
60
|
+
tickWidth="4px"
|
|
61
|
+
thumbHeight="18px"
|
|
62
|
+
thumbWidth="18px"
|
|
63
|
+
minTrackTickColor="#fff"
|
|
64
|
+
maxTrackTickColor="#fff"
|
|
65
|
+
isShowTicks
|
|
66
|
+
step={10}
|
|
67
|
+
min={0}
|
|
68
|
+
max={100}
|
|
69
|
+
/>
|
|
70
|
+
);
|
|
71
|
+
}
|
|
72
|
+
```
|
|
73
|
+
|
|
74
|
+
### 间隔滑动条 - 样式2
|
|
75
|
+
|
|
76
|
+
设置 `hideThumbButton` 为 `true` ,可以隐藏滑块按钮
|
|
77
|
+
|
|
78
|
+
```jsx
|
|
79
|
+
import { Slider } from '@ray-js/smart-ui';
|
|
80
|
+
import React from 'react';
|
|
81
|
+
|
|
82
|
+
export default function Demo() {
|
|
83
|
+
const [value, setValue] = React.useState(30);
|
|
84
|
+
|
|
85
|
+
return (
|
|
86
|
+
<Slider
|
|
87
|
+
isShowTicks
|
|
88
|
+
step={30}
|
|
89
|
+
min={0}
|
|
90
|
+
max={90}
|
|
91
|
+
maxTrackHeight="40px"
|
|
92
|
+
maxTrackRadius="16px"
|
|
93
|
+
minTrackWidth="40px"
|
|
94
|
+
minTrackHeight="40px"
|
|
95
|
+
minTrackRadius="16px"
|
|
96
|
+
tickWidth="4px"
|
|
97
|
+
tickHeight="12px"
|
|
98
|
+
tickRadius="4px"
|
|
99
|
+
hideThumbButton
|
|
100
|
+
value={value}
|
|
101
|
+
onAfterChange={value => setValue(value)}
|
|
102
|
+
/>
|
|
103
|
+
);
|
|
104
|
+
}
|
|
105
|
+
```
|
|
106
|
+
|
|
107
|
+
### 拖动滑动条
|
|
108
|
+
|
|
109
|
+
```jsx
|
|
110
|
+
import { Slider } from '@ray-js/smart-ui';
|
|
111
|
+
import React from 'react';
|
|
112
|
+
|
|
113
|
+
export default function Demo() {
|
|
114
|
+
const [value, setValue] = React.useState(30);
|
|
115
|
+
|
|
116
|
+
return (
|
|
117
|
+
<Slider
|
|
118
|
+
minTrackRadius="13px"
|
|
119
|
+
minTrackHeight="22px"
|
|
120
|
+
maxTrackRadius="13px"
|
|
121
|
+
maxTrackHeight="26px"
|
|
122
|
+
value={value}
|
|
123
|
+
thumbWidth={18}
|
|
124
|
+
thumbHeight={18}
|
|
125
|
+
parcel
|
|
126
|
+
parcelMargin={2}
|
|
127
|
+
onAfterChange={value => setValue(value)}
|
|
128
|
+
/>
|
|
129
|
+
);
|
|
130
|
+
}
|
|
131
|
+
```
|
|
132
|
+
|
|
133
|
+
### 拖动滑动条 - 样式2
|
|
134
|
+
|
|
135
|
+
```jsx
|
|
136
|
+
import { Slider } from '@ray-js/smart-ui';
|
|
137
|
+
import React from 'react';
|
|
138
|
+
|
|
139
|
+
export default function Demo() {
|
|
140
|
+
const [value, setValue] = React.useState(30);
|
|
141
|
+
|
|
142
|
+
return (
|
|
143
|
+
<Slider
|
|
144
|
+
minTrackRadius="8px"
|
|
145
|
+
minTrackHeight="45px"
|
|
146
|
+
maxTrackRadius="8px"
|
|
147
|
+
maxTrackHeight="45px"
|
|
148
|
+
value={value}
|
|
149
|
+
onAfterChange={value => setValue(value)}
|
|
150
|
+
thumbWidth={15}
|
|
151
|
+
thumbHeight={50}
|
|
152
|
+
thumbRadius={2}
|
|
153
|
+
thumbStyle={{
|
|
154
|
+
background: '#BBC5D4',
|
|
155
|
+
border: '2px solid #FFFFFF',
|
|
156
|
+
boxShadow: '0px 0px 2px 0px rgba(0, 0, 0, 0.5)',
|
|
157
|
+
}}
|
|
158
|
+
/>
|
|
159
|
+
);
|
|
160
|
+
}
|
|
161
|
+
```
|
|
162
|
+
|
|
163
|
+
### 拖动滑动条 - 样式3
|
|
164
|
+
|
|
165
|
+
```jsx
|
|
166
|
+
import { Slider } from '@ray-js/smart-ui';
|
|
167
|
+
import React from 'react';
|
|
168
|
+
|
|
169
|
+
export default function Demo() {
|
|
170
|
+
const [value, setValue] = React.useState(30);
|
|
171
|
+
|
|
172
|
+
return (
|
|
173
|
+
<Slider
|
|
174
|
+
parcel
|
|
175
|
+
parcelMargin={2}
|
|
176
|
+
minTrackRadius="5px"
|
|
177
|
+
minTrackHeight="22px"
|
|
178
|
+
maxTrackRadius="5px"
|
|
179
|
+
maxTrackHeight="26px"
|
|
180
|
+
value={value}
|
|
181
|
+
thumbWidth={3}
|
|
182
|
+
thumbHeight={16}
|
|
183
|
+
onAfterChange={value => setValue(value)}
|
|
184
|
+
/>
|
|
185
|
+
);
|
|
186
|
+
}
|
|
187
|
+
```
|
|
188
|
+
|
|
189
|
+
### 双滑块滑动条
|
|
190
|
+
|
|
191
|
+
```jsx
|
|
192
|
+
import { View } from '@ray-js/ray';
|
|
193
|
+
import { Slider } from '@ray-js/smart-ui';
|
|
194
|
+
import React from 'react';
|
|
195
|
+
|
|
196
|
+
export default function Demo() {
|
|
197
|
+
const [value, setValue] = React.useState([10, 30]);
|
|
198
|
+
|
|
199
|
+
return (
|
|
200
|
+
<View style={{ padding: 48 }}>
|
|
201
|
+
<Slider.RangeSlider
|
|
202
|
+
min={0}
|
|
203
|
+
max={100}
|
|
204
|
+
barHeight="4px"
|
|
205
|
+
value={value}
|
|
206
|
+
inActiveColor="#D8D9DC"
|
|
207
|
+
activeColor="#007AFF"
|
|
208
|
+
onChange={event => setValue(event.detail)}
|
|
209
|
+
/>
|
|
210
|
+
</View>
|
|
211
|
+
);
|
|
212
|
+
}
|
|
213
|
+
```
|
|
214
|
+
|
|
215
|
+
|
|
216
|
+
### 竖向
|
|
217
|
+
|
|
218
|
+
```jsx
|
|
219
|
+
import { Slider } from '@ray-js/smart-ui';
|
|
220
|
+
import React from 'react';
|
|
221
|
+
|
|
222
|
+
export default function Demo() {
|
|
223
|
+
const [value, setValue] = React.useState(30);
|
|
224
|
+
return (
|
|
225
|
+
<Slider
|
|
226
|
+
isVertical
|
|
227
|
+
value={value}
|
|
228
|
+
step={1}
|
|
229
|
+
min={0}
|
|
230
|
+
max={100}
|
|
231
|
+
parcel
|
|
232
|
+
parcelMargin={2}
|
|
233
|
+
useParcelPadding={false}
|
|
234
|
+
thumbWidth={12}
|
|
235
|
+
thumbHeight={2}
|
|
236
|
+
thumbRadius={2}
|
|
237
|
+
maxTrackWidth="48px"
|
|
238
|
+
maxTrackHeight="203px"
|
|
239
|
+
maxTrackRadius="8px"
|
|
240
|
+
minTrackWidth="48px"
|
|
241
|
+
minTrackHeight="114px"
|
|
242
|
+
maxTrackColor="rgba(0, 0, 0, 0.08)"
|
|
243
|
+
minTrackColor="#1989FA"
|
|
244
|
+
onAfterChange={setValue}
|
|
245
|
+
thumbStyle={{
|
|
246
|
+
borderRadius: '2px',
|
|
247
|
+
width: '12px',
|
|
248
|
+
height: '2px',
|
|
249
|
+
}}
|
|
250
|
+
/>
|
|
251
|
+
);
|
|
252
|
+
}
|
|
253
|
+
```
|
|
254
|
+
|
|
255
|
+
## API
|
|
256
|
+
|
|
257
|
+
### Slider Props
|
|
258
|
+
|
|
259
|
+
|属性名|描述|类型|默认值|
|
|
260
|
+
|---|---|---|---|
|
|
261
|
+
|instanceId|--|string|undefined|
|
|
262
|
+
|className|类名|string|undefined|
|
|
263
|
+
|style|样式|CSSProperties|undefined|
|
|
264
|
+
|isVertical|是否垂直展示,垂直展示时,需要设置滑槽宽高|boolean|false|
|
|
265
|
+
|value|样式|number|undefined|
|
|
266
|
+
|defaultValue|默认值|number|0|
|
|
267
|
+
|min|最小值|number|0|
|
|
268
|
+
|max|最大值|number|100|
|
|
269
|
+
|step|步距,取值必须大于 `0`,并且可被 `(max - min)` 整除。|number|1|
|
|
270
|
+
|forceStep|和 step 一致,用于滑块不跟随刻度时设置|number|1|
|
|
271
|
+
|disabled|是否禁用|boolean|false|
|
|
272
|
+
|onChange|拖拽滑块时触发,并把当前拖拽的值作为参数传入|(value: number) => void|undefined|
|
|
273
|
+
|onBeforeChange|滑块拖拽开始时触发,并把当前拖拽的值作为参数传入|(value: number) => void|undefined|
|
|
274
|
+
|onAfterChange|与 `touchend` 触发时机一致,把当前值作为参数传入|(value: number) => void|undefined|
|
|
275
|
+
|maxTrackWidth|滑槽宽度|Width<string \| number>|'100%'|
|
|
276
|
+
|maxTrackHeight|滑槽高度|Width<string \| number>|'4px'|
|
|
277
|
+
|maxTrackRadius|滑槽圆角|BorderRadius<string \| number>|'4px'|
|
|
278
|
+
|maxTrackColor|滑槽颜色|Background<0 \| (string & {})>|'#d8d8d8'|
|
|
279
|
+
|minTrackWidth|滑条最小宽度|Width<string \| number>|'28px'|
|
|
280
|
+
|minTrackHeight|滑条高度|Width<string \| number>|'4px'|
|
|
281
|
+
|minTrackRadius|滑条圆角|BorderRadius<string \| number>|'inherit'|
|
|
282
|
+
|minTrackColor|滑条颜色|Background<0 \| (string & {})>|'#158CFB'|
|
|
283
|
+
|thumbWidth|滑块宽度|Width<string \| number>|'28px'|
|
|
284
|
+
|thumbStyle|滑块样式|CSSProperties|null|
|
|
285
|
+
|thumbWrapStyle|滑块wrap样式|CSSProperties|null|
|
|
286
|
+
|thumbHeight|滑块高度|string | number|'28px'|
|
|
287
|
+
|thumbRadius|滑块圆角|string | number|'28px'|
|
|
288
|
+
|thumbColor|滑块颜色|Background<0 \| (string & {})>|'#ffffff'|
|
|
289
|
+
|thumbBorderStyle|滑块边框类型|BorderStyle|'none'|
|
|
290
|
+
|thumbBoxShadowStyle|滑块阴影|BoxShadow|'0px 0.5px 4px rgba(0, 0, 0, 0.12), 0px 6px 13px rgba(0, 0, 0, 0.12)'|
|
|
291
|
+
|isShowTicks|是否显示刻度|boolean|false|
|
|
292
|
+
|tickWidth|刻度宽度|string|'4px'|
|
|
293
|
+
|tickHeight|刻度高度|string|'12px'|
|
|
294
|
+
|tickRadius|刻度圆角|string|'4px'|
|
|
295
|
+
|maxTrackTickColor|滑槽刻度颜色|string|'#158CFB'|
|
|
296
|
+
|minTrackTickColor|滑条刻度颜色|string|'#ffffff'|
|
|
297
|
+
|trackStyle|轨道样式|CSSProperties|undefined|
|
|
298
|
+
|barStyle|滑条样式|CSSProperties|undefined|
|
|
299
|
+
|renderType|渲染方式|"ray" | "sjs"|'sjs'|
|
|
300
|
+
|hideThumbButton|隐藏滑块|boolean|null|
|
|
301
|
+
|thumbStyleRenderFormatter|渲染按钮背景色,例如 "rgb(value,100,100)",将value替换为滑动值(仅sjs支持)|Partial<Record<keyof CSSProperties, string>>|null|
|
|
302
|
+
|thumbStyleRenderValueScale|渲染value时的缩放倍数|number|1|
|
|
303
|
+
|thumbStyleRenderValueStart|渲染value时的起始值|number|0|
|
|
304
|
+
|thumbStyleRenderValueReverse|渲染value时反转值|boolean|false|
|
|
305
|
+
|enableTouch|使用触摸跳跃|boolean|true|
|
|
306
|
+
|hidden|是否隐藏|boolean|false|
|
|
307
|
+
|parcel|包裹滑动条|boolean|false|
|
|
308
|
+
|parcelMargin|包裹滑动条间隔|number|0|
|
|
309
|
+
|
|
310
|
+
### Slot
|
|
311
|
+
|
|
312
|
+
| 名称 | 说明 |
|
|
313
|
+
| ----- | -------- |
|
|
314
|
+
| bar `v2.4.0` | 滑动条插槽 |
|
|
315
|
+
| thumb `v2.4.0` | 滑块插槽 |
|
|
316
|
+
|
|
317
|
+
### RangeSlider Props
|
|
318
|
+
|
|
319
|
+
|参数|说明|类型|默认值|
|
|
320
|
+
|---|---|---|---|
|
|
321
|
+
|value|当前进度百分比,在双滑块模式下为数组格式|number | number[]|0|
|
|
322
|
+
|disabled|是否禁用滑块|boolean|false|
|
|
323
|
+
|max|最大值|number|100|
|
|
324
|
+
|min|最小值|number|0|
|
|
325
|
+
|step|步长|number|1|
|
|
326
|
+
|barHeight|进度条高度,默认单位为 px|string | number|2px|
|
|
327
|
+
|activeColor|进度条激活态颜色|string|#1989fa|
|
|
328
|
+
|inactiveColor|进度条默认颜色|string|#e5e5e5|
|
|
329
|
+
|vertical|是否垂直展示|boolean|false|
|
|
330
|
+
|onDrag|拖动进度条时触发|event.detail.value: 当前进度|
|
|
331
|
+
|onChange|进度值改变后触发|event.detail: 当前进度|
|
|
332
|
+
|onDragStart|开始拖动时触发|-|
|
|
333
|
+
|onDragEnd|结束拖动时触发|-|
|
|
334
|
+
|
|
335
|
+
### 样式变量
|
|
336
|
+
|
|
337
|
+
组件提供了下列 CSS 变量,可用于自定义样式,使用方法请参考 [ConfigProvider 组件](/material/smartui?comId=config-provider)。
|
|
338
|
+
|
|
339
|
+
| 名称 | 默认值 | 描述 |
|
|
340
|
+
| ----------------------------- | -------------------------------------- | ---- |
|
|
341
|
+
| --slider-active-background-color | _#1989fa_ | 设置滑块激活状态下的背景颜色。 |
|
|
342
|
+
| --slider-inactive-background-color | _#ebedf0_ | 设置滑块未激活状态下的背景颜色。 |
|
|
343
|
+
| --slider-disabled-opacity | _0.3_ | 设置滑块禁用状态的透明度,数值越小透明度越高。 |
|
|
344
|
+
| --slider-bar-height | _2px_ | 设置滑块轨道的高度。 |
|
|
345
|
+
| --slider-button-width | _24px_ | 设置滑块按钮的宽度。 |
|
|
346
|
+
| --slider-button-height | _24px_ | 设置滑块按钮的高度。 |
|
|
347
|
+
| --slider-button-border-radius | _50%_ | 设置滑块按钮的圆角半径,通常用来实现圆形按钮。 |
|
|
348
|
+
| --slider-button-background-color | _#fff_ | 设置滑块按钮的背景颜色。 |
|
|
349
|
+
| --slider-button-box-shadow | _0 1px 2px rgba(0, 0, 0, 0.5)_ | 设置滑块按钮的阴影效果,可以增强立体感。 |
|
|
350
|
+
| --slider-thumb-color | _var(--app-B3, #ffffff)_ | 设置滑块按钮的指示色,通常用于显示当前进度的指示器。 |
|
|
351
|
+
|
|
352
|
+
## 常见问题
|
|
353
|
+
|
|
354
|
+
### Slider 拖动时会抖动卡顿
|
|
355
|
+
|
|
356
|
+
Slider 拖动时会抖动卡顿,需要检查一下是否为非受控组件写法,尽量使用 `onAfterChange` 来更新 `value`,推荐写法如下:
|
|
357
|
+
|
|
358
|
+
```tsx
|
|
359
|
+
export default () => {
|
|
360
|
+
const [value, setValue] = useState(10) // onAfterChange 拖动结束后更新
|
|
361
|
+
const [showValue, setShowValue] = useState(10) // 只用作实时展示使用
|
|
362
|
+
|
|
363
|
+
return (
|
|
364
|
+
<>
|
|
365
|
+
<View>当前值:{showValue}</View>
|
|
366
|
+
<Slider
|
|
367
|
+
value={value}
|
|
368
|
+
onChange={(newValue) => {
|
|
369
|
+
setShowValue(newValue)
|
|
370
|
+
}}
|
|
371
|
+
onAfterChange={setValue} // 松开滑块时触发
|
|
372
|
+
/>
|
|
373
|
+
</>
|
|
374
|
+
)
|
|
375
|
+
}
|
|
376
|
+
```
|
|
377
|
+
|
|
378
|
+
|
|
379
|
+
### Slider 受控模式滑动位置定位异常,该如何处理?
|
|
380
|
+
|
|
381
|
+
这种情况往往是在在`Popup`弹框内嵌套使用`Slider`,由于 `Slider` 组件使用到 `auto-height` 属性时,在 `Popup` 打开时可能尚未完全渲染,因此我们无法获取其 DOM,从而导致定位出现问题。
|
|
382
|
+
解决方案是在 `Popup` 的 `onAfterEnter` 事件回调之后再开始渲染此类组件。这样,我们可以确保此类组件能够在获取 DOM 时被正常渲染。请参考以下示例:
|
|
383
|
+
|
|
384
|
+
```jsx
|
|
385
|
+
import React from 'react';
|
|
386
|
+
import { Cell, Popup } from '@ray-js/smart-ui';
|
|
387
|
+
import { DemoBlock } from '@/components';
|
|
388
|
+
import { View, Slider } from '@ray-js/ray';
|
|
389
|
+
|
|
390
|
+
function Demo() {
|
|
391
|
+
const [show, setShow] = React.useState(false);
|
|
392
|
+
const [isReady, setIsReady] = React.useState(false);
|
|
393
|
+
const showBasic = () => setShow(true);
|
|
394
|
+
const handleChange = e => setValue(e.detail.value);
|
|
395
|
+
|
|
396
|
+
return (
|
|
397
|
+
<DemoBlock title="基础用法">
|
|
398
|
+
<Cell title="展示弹出层" isLink onClick={showBasic} />
|
|
399
|
+
<Popup
|
|
400
|
+
show={show}
|
|
401
|
+
position="bottom"
|
|
402
|
+
onClose={hideBasic}
|
|
403
|
+
onAfterEnter={() => setIsReady(true)}
|
|
404
|
+
>
|
|
405
|
+
<View style={{ padding: '32px', position: 'relative' }}>
|
|
406
|
+
{isReady && <Slider value={value} max={100} min={0} onChange={handleChange} />}
|
|
407
|
+
</View>
|
|
408
|
+
</Popup>
|
|
409
|
+
</DemoBlock>
|
|
410
|
+
);
|
|
411
|
+
}
|
|
412
|
+
```
|
|
413
|
+
|
|
414
|
+
注意,`isReady` 可能存在首次渲染布局抖动,请升级到最新版,使用 `Slider` 的 `deps` 属性进行渲染优化,示例:
|
|
415
|
+
|
|
416
|
+
```jsx
|
|
417
|
+
import React from 'react';
|
|
418
|
+
import { Cell, Popup } from '@ray-js/smart-ui';
|
|
419
|
+
import { DemoBlock } from '@/components';
|
|
420
|
+
import { View, Slider } from '@ray-js/ray';
|
|
421
|
+
|
|
422
|
+
function Demo() {
|
|
423
|
+
const [show, setShow] = React.useState(false);
|
|
424
|
+
const [isReady, setIsReady] = React.useState(false);
|
|
425
|
+
const showBasic = () => setShow(true);
|
|
426
|
+
const handleChange = e => setValue(e.detail.value);
|
|
427
|
+
|
|
428
|
+
return (
|
|
429
|
+
<DemoBlock title="基础用法">
|
|
430
|
+
<Cell title="展示弹出层" isLink onClick={showBasic} />
|
|
431
|
+
<Popup
|
|
432
|
+
show={show}
|
|
433
|
+
position="bottom"
|
|
434
|
+
onClose={hideBasic}
|
|
435
|
+
onAfterEnter={() => setIsReady(true)}
|
|
436
|
+
>
|
|
437
|
+
<View style={{ padding: '32px', position: 'relative' }}>
|
|
438
|
+
<Slider deps={[show]} value={value} max={100} min={0} onChange={handleChange} />
|
|
439
|
+
</View>
|
|
440
|
+
</Popup>
|
|
441
|
+
</DemoBlock>
|
|
442
|
+
);
|
|
443
|
+
}
|
|
444
|
+
```
|
|
@@ -0,0 +1,231 @@
|
|
|
1
|
+
---
|
|
2
|
+
category: 数据录入
|
|
3
|
+
---
|
|
4
|
+
|
|
5
|
+
# Stepper 步进器
|
|
6
|
+
|
|
7
|
+
### 介绍
|
|
8
|
+
|
|
9
|
+
步进器由增加按钮、减少按钮和输入框组成,用于在一定范围内输入、调整数字。
|
|
10
|
+
|
|
11
|
+
### 引入
|
|
12
|
+
|
|
13
|
+
```jsx
|
|
14
|
+
import { Stepper } from '@ray-js/smart-ui';
|
|
15
|
+
```
|
|
16
|
+
|
|
17
|
+
## 代码演示
|
|
18
|
+
|
|
19
|
+
### 基础用法
|
|
20
|
+
|
|
21
|
+
通过`value`设置输入值,可以通过`onChange`事件监听到输入值的变化。
|
|
22
|
+
|
|
23
|
+
```jsx
|
|
24
|
+
import { Stepper } from '@ray-js/smart-ui';
|
|
25
|
+
import React from 'react';
|
|
26
|
+
|
|
27
|
+
export default function Demo() {
|
|
28
|
+
const onChange = event => {
|
|
29
|
+
console.log(event.detail);
|
|
30
|
+
};
|
|
31
|
+
|
|
32
|
+
return <Stepper value={1} onChange={onChange} />;
|
|
33
|
+
}
|
|
34
|
+
```
|
|
35
|
+
|
|
36
|
+
### 步长设置
|
|
37
|
+
|
|
38
|
+
通过`step`属性设置每次点击增加或减少按钮时变化的值,默认为`1`。
|
|
39
|
+
|
|
40
|
+
```jsx
|
|
41
|
+
import { Stepper } from '@ray-js/smart-ui';
|
|
42
|
+
import React from 'react';
|
|
43
|
+
|
|
44
|
+
export default function Demo() {
|
|
45
|
+
return <Stepper value={1} step="2" />;
|
|
46
|
+
}
|
|
47
|
+
```
|
|
48
|
+
|
|
49
|
+
### 限制输入范围
|
|
50
|
+
|
|
51
|
+
通过`min`和`max`属性限制输入值的范围。
|
|
52
|
+
|
|
53
|
+
```jsx
|
|
54
|
+
import { Stepper } from '@ray-js/smart-ui';
|
|
55
|
+
import React from 'react';
|
|
56
|
+
|
|
57
|
+
export default function Demo() {
|
|
58
|
+
return <Stepper value={5} min="5" max="8" />
|
|
59
|
+
}
|
|
60
|
+
```
|
|
61
|
+
|
|
62
|
+
### 限制输入整数
|
|
63
|
+
|
|
64
|
+
设置`integer`属性后,输入框将限制只能输入整数。
|
|
65
|
+
|
|
66
|
+
```jsx
|
|
67
|
+
import { Stepper } from '@ray-js/smart-ui';
|
|
68
|
+
import React from 'react';
|
|
69
|
+
|
|
70
|
+
export default function Demo() {
|
|
71
|
+
return <Stepper value={1} integer />
|
|
72
|
+
}
|
|
73
|
+
```
|
|
74
|
+
|
|
75
|
+
### 禁用状态
|
|
76
|
+
|
|
77
|
+
通过设置`disabled`属性来禁用步进器,禁用状态下无法点击按钮或修改输入框。
|
|
78
|
+
|
|
79
|
+
```jsx
|
|
80
|
+
import { Stepper } from '@ray-js/smart-ui';
|
|
81
|
+
import React from 'react';
|
|
82
|
+
|
|
83
|
+
export default function Demo() {
|
|
84
|
+
return <Stepper value={1} disabled />
|
|
85
|
+
}
|
|
86
|
+
```
|
|
87
|
+
|
|
88
|
+
### 禁用长按
|
|
89
|
+
|
|
90
|
+
通过设置`longpress`属性决定步进器是否开启长按手势。
|
|
91
|
+
|
|
92
|
+
```jsx
|
|
93
|
+
import { Stepper } from '@ray-js/smart-ui';
|
|
94
|
+
import React from 'react';
|
|
95
|
+
|
|
96
|
+
export default function Demo() {
|
|
97
|
+
return <Stepper value={1} longPress={false} />
|
|
98
|
+
}
|
|
99
|
+
```
|
|
100
|
+
|
|
101
|
+
### 固定小数位数
|
|
102
|
+
|
|
103
|
+
通过设置`decimalLength`属性可以保留固定的小数位数。
|
|
104
|
+
|
|
105
|
+
```jsx
|
|
106
|
+
import { Stepper } from '@ray-js/smart-ui';
|
|
107
|
+
import React from 'react';
|
|
108
|
+
|
|
109
|
+
export default function Demo() {
|
|
110
|
+
return <Stepper value={1} step="0.2" decimalLength={1} />
|
|
111
|
+
}
|
|
112
|
+
```
|
|
113
|
+
|
|
114
|
+
### 异步变更
|
|
115
|
+
|
|
116
|
+
如果需要异步地修改输入框的值,可以设置`asyncChange`属性,并在`onChange`事件中手动修改`value`。
|
|
117
|
+
|
|
118
|
+
```jsx
|
|
119
|
+
import { Stepper } from '@ray-js/smart-ui';
|
|
120
|
+
import React, { useState } from 'react';
|
|
121
|
+
import { showLoading, hideLoading } from '@ray-js/ray';
|
|
122
|
+
|
|
123
|
+
export default function Demo() {
|
|
124
|
+
const [value, setValue] = useState(1);
|
|
125
|
+
const onChange = event => {
|
|
126
|
+
showLoading({ title: '', mask: true });
|
|
127
|
+
|
|
128
|
+
setTimeout(() => {
|
|
129
|
+
hideLoading();
|
|
130
|
+
setValue(event.detail);
|
|
131
|
+
}, 500);
|
|
132
|
+
};
|
|
133
|
+
|
|
134
|
+
return <Stepper value={value} asyncChange onChange={onChange} />
|
|
135
|
+
}
|
|
136
|
+
```
|
|
137
|
+
|
|
138
|
+
### 自定义大小
|
|
139
|
+
|
|
140
|
+
通过`inputWidth`属性设置输入框宽度,通过`buttonSize`属性设置按钮大小和输入框高度。
|
|
141
|
+
|
|
142
|
+
```jsx
|
|
143
|
+
import { Stepper } from '@ray-js/smart-ui';
|
|
144
|
+
import React from 'react';
|
|
145
|
+
|
|
146
|
+
export default function Demo() {
|
|
147
|
+
return <Stepper value={1} inputWidth="40px" buttonSize="32px" />
|
|
148
|
+
}
|
|
149
|
+
```
|
|
150
|
+
|
|
151
|
+
## API
|
|
152
|
+
|
|
153
|
+
### Props
|
|
154
|
+
|
|
155
|
+
| 参数 | 说明 | 类型 | 默认值 |
|
|
156
|
+
| --------------------- | ------------------------------------------------------------------------------- | ------------------ | ------- |
|
|
157
|
+
| alwaysEmbed `v1.9.3` | 强制 input 处于同层状态,默认 focus 时 input 会切到非同层状态 (仅在 iOS 下生效) | _boolean_ | `false` |
|
|
158
|
+
| asyncChange | 是否开启异步变更,开启后需要手动控制输入值 | _boolean_ | `false` |
|
|
159
|
+
| buttonSize | 按钮大小,默认单位为 `px`,输入框高度会和按钮大小保持一致 | _string \| number_ | `28px` |
|
|
160
|
+
| decimalLength | 固定显示的小数位数 | _number_ | - |
|
|
161
|
+
| disableInput | 是否禁用输入框 | _boolean_ | `false` |
|
|
162
|
+
| disableMinus | 是否禁用减少按钮 | _boolean_ | - |
|
|
163
|
+
| disablePlus | 是否禁用增加按钮 | _boolean_ | - |
|
|
164
|
+
| disabled | 是否禁用 | _boolean_ | `false` |
|
|
165
|
+
| inputWidth | 输入框宽度,默认单位为 `px` | _string \| number_ | `32px` |
|
|
166
|
+
| integer | 是否只允许输入整数 | _boolean_ | `false` |
|
|
167
|
+
| longPress | 是否开启长按手势 | _boolean_ | `true` |
|
|
168
|
+
| max | 最大值 | _string \| number_ | - |
|
|
169
|
+
| min | 最小值 | _string \| number_ | `1` |
|
|
170
|
+
| minusAriaLabel `v2.13.0` | 减少按钮的无障碍读屏文案 | _string_ | - |
|
|
171
|
+
| name | 在表单内提交时的标识符 | _string_ | - |
|
|
172
|
+
| plusAriaLabel `v2.13.0` | 增加按钮的无障碍读屏文案 | _string_ | - |
|
|
173
|
+
| showMinus | 是否显示减少按钮 | _boolean_ | `true` |
|
|
174
|
+
| showPlus | 是否显示增加按钮 | _boolean_ | `true` |
|
|
175
|
+
| step | 步长 | _string \| number_ | `1` |
|
|
176
|
+
| theme | 样式风格,可选值为 `round` | _string_ | - |
|
|
177
|
+
| value | 输入值 | _string \| number_ | 最小值 |
|
|
178
|
+
|
|
179
|
+
### Events
|
|
180
|
+
|
|
181
|
+
| 事件名 | 说明 | 回调参数 |
|
|
182
|
+
| -------------- | ------------------------ | -------------------------- |
|
|
183
|
+
| onBlur | 输入框失焦时触发 | - |
|
|
184
|
+
| onChange | 当绑定值变化时触发的事件 | event.detail: 当前输入的值 |
|
|
185
|
+
| onFocus | 输入框聚焦时触发 | - |
|
|
186
|
+
| onMinus | 点击减少按钮时触发 | - |
|
|
187
|
+
| onOverlimit | 点击不可用的按钮时触发 | - |
|
|
188
|
+
| onPlus | 点击增加按钮时触发 | - |
|
|
189
|
+
|
|
190
|
+
### Slot
|
|
191
|
+
|
|
192
|
+
| 名称 | 说明 |
|
|
193
|
+
| ----- | -------- |
|
|
194
|
+
| minus | 减号按钮 |
|
|
195
|
+
| plus | 加号按钮 |
|
|
196
|
+
|
|
197
|
+
### 外部样式类
|
|
198
|
+
|
|
199
|
+
| 类名 | 说明 |
|
|
200
|
+
| --------------- | -------------- |
|
|
201
|
+
| customClass | 根节点样式类 |
|
|
202
|
+
| inputClass | 输入框样式类 |
|
|
203
|
+
| minusmartClass | 减号按钮样式类 |
|
|
204
|
+
| plusmartClass | 加号按钮样式类 |
|
|
205
|
+
|
|
206
|
+
### 样式变量
|
|
207
|
+
|
|
208
|
+
组件提供了下列 CSS 变量,可用于自定义样式,使用方法请参考 [ConfigProvider 组件](/material/smartui?comId=config-provider)。
|
|
209
|
+
|
|
210
|
+
| 名称 | 默认值 | 描述 |
|
|
211
|
+
| ----------------------------- | -------------------------------------- | ---- |
|
|
212
|
+
| --stepper-container-background-color | _var(--app-B6-N9, rgba(0, 0, 0, 0.05))_ | 背景色 |
|
|
213
|
+
| --stepper-background-border-radius | _10px_ | 背景圆角 |
|
|
214
|
+
| --stepper-padding | _2px_ | 外部合作内边距 |
|
|
215
|
+
| --stepper-active-color | _#e8e8e8_ | 按钮点击后颜色 |
|
|
216
|
+
| --stepper-background-color | _var(--app-B6, #fff)_ | 按钮背景色 |
|
|
217
|
+
| --stepper-button-icon-color | _var(--app-B6-N3, rgba(0, 0, 0, 0.5))_ | 按钮内部图标颜色 |
|
|
218
|
+
| --stepper-button-disabled-color | _none_ `v2.1.7` _var(--app-B6, #ffffff)_ `v2.6.1` | 按钮禁用颜色 |
|
|
219
|
+
| --stepper-button-disabled-icon-color | _var(--app-B6-N7, rgba(0, 0, 0, 0.1))_ | 按钮禁用图标颜色 |
|
|
220
|
+
| --stepper-button-round-theme-color | _#ee0a24_ | 圆角样式按钮颜色 |
|
|
221
|
+
| --stepper-btn-width | _44px_ | 按钮宽度 |
|
|
222
|
+
| --stepper-btn-height | _28px_ | 按钮高度 |
|
|
223
|
+
| --stepper-input-width | _50px_ | 中间数组输入框宽度 |
|
|
224
|
+
| --stepper-input-height | _28px_ | 中间数组输入框高度 |
|
|
225
|
+
| --stepper-input-font-size | _16px_ | 中间数组输入框字体大小 |
|
|
226
|
+
| --stepper-input-line-height | _normal_ | 中间数组输入框字体高度 |
|
|
227
|
+
| --stepper-input-text-color | _var(--app-B6-N1, rgba(0, 0, 0, 1))_ | 中间数组输入框字体颜色 |
|
|
228
|
+
| --stepper-input-disabled-text-color | _var(--app-B6-N7, rgba(0, 0, 0, 0.1))_ | 中间数组输入框禁用模式字体颜色 |
|
|
229
|
+
| --stepper-border-radius | _8px_ | 按钮圆角 |
|
|
230
|
+
| --stepper-button-border `v2.2.0` | _0_ | 按钮边框 |
|
|
231
|
+
| --stepper-button-icon-font-size `v2.2.0` | _22px_ | 按钮内部图标的字体大小 |
|