Skip to content

Commit fe6b12f

Browse files
authored
feat(Picker): add swipe-duration prop (youzan#4816)
1 parent b26a1f3 commit fe6b12f

6 files changed

Lines changed: 16 additions & 29 deletions

File tree

src/picker/PickerColumn.js

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -8,8 +8,7 @@ const DEFAULT_DURATION = 200;
88

99
// 惯性滑动思路:
1010
// 在手指离开屏幕时,如果和上一次 move 时的间隔小于 `MOMENTUM_LIMIT_TIME` 且 move
11-
// 距离大于 `MOMENTUM_LIMIT_DISTANCE` 时,执行惯性滑动,持续 `MOMENTUM_DURATION`
12-
const MOMENTUM_DURATION = 1000;
11+
// 距离大于 `MOMENTUM_LIMIT_DISTANCE` 时,执行惯性滑动
1312
const MOMENTUM_LIMIT_TIME = 300;
1413
const MOMENTUM_LIMIT_DISTANCE = 15;
1514

@@ -36,6 +35,7 @@ export default createComponent({
3635
className: String,
3736
itemHeight: Number,
3837
defaultIndex: Number,
38+
swipeDuration: Number,
3939
visibleItemCount: Number,
4040
initialOptions: {
4141
type: Array,
@@ -216,7 +216,7 @@ export default createComponent({
216216

217217
const index = this.getIndexByOffset(distance);
218218

219-
this.duration = MOMENTUM_DURATION;
219+
this.duration = this.swipeDuration;
220220
this.setIndex(index, true);
221221
},
222222

src/picker/README.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -198,6 +198,7 @@ When Picker columns data is acquired asynchronously, use `loading` prop to show
198198
| visible-item-count | Count of visible columns | *number* | `5` | - |
199199
| allow-html | Whether to allow HTML in option text | *boolean* | `true` | 2.1.8 |
200200
| default-index | Default value index of single column picker | *number* | `0` | - |
201+
| swipe-duration | Duration of the momentum animation,unit `ms` | *number* | `1000` | `2.2.10` |
201202

202203
### Events
203204

src/picker/README.zh-CN.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -206,6 +206,7 @@ export default {
206206
| visible-item-count | 可见的选项个数 | *number* | `5` | - |
207207
| allow-html | 是否允许选项内容中渲染 HTML | *boolean* | `true` | 2.1.8 |
208208
| default-index | 单列选择器的默认选中项索引,<br>多列选择器请参考下方的 Columns 配置 | *number* | `0` | - |
209+
| swipe-duration | 快速滑动时惯性滚动的时长,单位`ms` | *number* | `1000` | `2.2.10` |
209210

210211
### Events
211212

src/picker/demo/index.vue

Lines changed: 6 additions & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -1,18 +1,11 @@
11
<template>
22
<demo-section>
33
<demo-block :title="$t('basicUsage')">
4-
<van-picker
5-
:columns="$t('column1')"
6-
@change="onChange1"
7-
/>
4+
<van-picker :columns="$t('column1')" @change="onChange1" />
85
</demo-block>
96

107
<demo-block :title="$t('defaultIndex')">
11-
<van-picker
12-
:columns="$t('column1')"
13-
:default-index="2"
14-
@change="onChange1"
15-
/>
8+
<van-picker :columns="$t('column1')" :default-index="2" @change="onChange1" />
169
</demo-block>
1710

1811
<demo-block :title="$t('title3')">
@@ -34,10 +27,7 @@
3427
:placeholder="$t('chooseCity')"
3528
@click="onClickField"
3629
/>
37-
<van-popup
38-
v-model="showPicker"
39-
position="bottom"
40-
>
30+
<van-popup v-model="showPicker" position="bottom">
4131
<van-picker
4232
show-toolbar
4333
:columns="$t('column1')"
@@ -52,17 +42,11 @@
5242
</demo-block>
5343

5444
<demo-block :title="$t('title4')">
55-
<van-picker
56-
:columns="columns"
57-
@change="onChange2"
58-
/>
45+
<van-picker :columns="columns" @change="onChange2" />
5946
</demo-block>
6047

6148
<demo-block :title="$t('loadingStatus')">
62-
<van-picker
63-
loading
64-
:columns="columns"
65-
/>
49+
<van-picker loading :columns="columns" />
6650
</demo-block>
6751
</demo-section>
6852
</template>
@@ -79,11 +63,7 @@ export default {
7963
withPopup: '搭配弹出层使用',
8064
chooseCity: '选择城市',
8165
column1: ['杭州', '宁波', '温州', '嘉兴', '湖州'],
82-
column2: [
83-
{ text: '杭州', disabled: true },
84-
{ text: '宁波' },
85-
{ text: '温州' }
86-
],
66+
column2: [{ text: '杭州', disabled: true }, { text: '宁波' }, { text: '温州' }],
8767
column3: {
8868
浙江: ['杭州', '宁波', '温州', '嘉兴', '湖州'],
8969
福建: ['福州', '厦门', '莆田', '三明', '泉州']

src/picker/index.js

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -192,6 +192,7 @@ export default createComponent({
192192
className={item.className}
193193
itemHeight={this.itemHeight}
194194
defaultIndex={item.defaultIndex || this.defaultIndex}
195+
swipeDuration={this.swipeDuration}
195196
visibleItemCount={this.visibleItemCount}
196197
initialOptions={this.simple ? item : item.values}
197198
onChange={() => {

src/picker/shared.ts

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -25,5 +25,9 @@ export const pickerProps = {
2525
itemHeight: {
2626
type: Number,
2727
default: 44
28+
},
29+
swipeDuration: {
30+
type: Number,
31+
default: 1000
2832
}
2933
};

0 commit comments

Comments
 (0)