Skip to content

Commit 0d7ed81

Browse files
fix: 🐛 修复 Slider 处理边界值异常的问题,优化样式和事件处理逻辑 (#1050)
Closes: #1023
1 parent 33b5565 commit 0d7ed81

5 files changed

Lines changed: 327 additions & 286 deletions

File tree

src/subPages/slider/Index.vue

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,10 @@
11
<!--
22
* @Author: weisheng
33
* @Date: 2023-10-10 17:02:32
4-
* @LastEditTime: 2025-03-30 21:45:09
4+
* @LastEditTime: 2025-05-13 13:16:42
55
* @LastEditors: weisheng
66
* @Description:
7-
* @FilePath: /wot-design-uni/src/pages/slider/Index.vue
7+
* @FilePath: /wot-design-uni/src/subPages/slider/Index.vue
88
* 记得注释
99
-->
1010
<template>
@@ -14,6 +14,7 @@
1414
</demo-block>
1515
<demo-block :title="$t('zhi-ding-xuan-ze-fan-wei')">
1616
<wd-slider v-model="value2" :min="-10" :max="10" />
17+
<wd-slider v-model="value8" :min="160" :max="280" :step="30" />
1718
</demo-block>
1819
<demo-block :title="$t('zhi-ding-bu-chang')">
1920
<wd-slider v-model="value4" hide-min-max :step="10" />
@@ -34,6 +35,8 @@ import { ref } from 'vue'
3435
3536
const value1 = ref<number>(30)
3637
const value2 = ref<number>(479)
38+
const value8 = ref<number>(185)
39+
3740
const value4 = ref<number>(11)
3841
const value5 = ref<number>(70)
3942
const value6 = ref<number[]>([20, 40])

src/uni_modules/wot-design-uni/components/wd-slider/index.scss

Lines changed: 8 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -58,10 +58,16 @@
5858
}
5959
@include e(button-wrapper) {
6060
width: calc($-slider-handle-radius * 2);
61+
/* 右侧滑块按钮定位,向右偏移自身宽度的50% */
62+
transform: translate3d(50%, -50%, 0);
6163
position: absolute;
6264
right: 0;
63-
top: 0;
64-
transform: translate3d(-50%, -50%, 0);
65+
66+
@include m(left){
67+
left: 0;
68+
/* 左侧滑块按钮定位,向左偏移自身宽度的50% */
69+
transform: translate3d(-50%, -50%, 0);
70+
}
6571
}
6672
@include e(has-label) {
6773
padding-top: calc($-slider-fs * 1.2 + 8px);

src/uni_modules/wot-design-uni/components/wd-slider/types.ts

Lines changed: 46 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -1,15 +1,11 @@
1-
/*
2-
* @Author: weisheng
3-
* @Date: 2024-06-03 23:43:43
4-
* @LastEditTime: 2024-06-06 22:03:57
5-
* @LastEditors: weisheng
6-
* @Description:
7-
* @FilePath: /wot-design-uni/src/uni_modules/wot-design-uni/components/wd-slider/types.ts
8-
* 记得注释
9-
*/
10-
import type { ComponentPublicInstance, PropType } from 'vue'
1+
import type { ComponentPublicInstance, ExtractPropTypes, PropType } from 'vue'
112
import { baseProps, makeBooleanProp, makeNumberProp, makeStringProp } from '../common/props'
123

4+
/**
5+
* 滑块值类型 - 单滑块为数字,双滑块为数组
6+
*/
7+
export type SliderValue = number | number[]
8+
139
export const sliderProps = {
1410
...baseProps,
1511

@@ -89,16 +85,54 @@ export const sliderProps = {
8985
* 默认值: 0
9086
*/
9187
modelValue: {
92-
type: [Number, Array] as PropType<number | number[]>,
88+
type: [Number, Array] as PropType<SliderValue>,
9389
default: 0
9490
}
9591
}
9692

93+
/**
94+
* 滑块拖动事件参数
95+
*/
96+
export interface SliderDragEvent {
97+
/**
98+
* 当前滑块的值
99+
* 单滑块模式为数字,双滑块模式为数组
100+
*/
101+
value: SliderValue
102+
}
103+
104+
/**
105+
* 滑块组件事件类型定义
106+
*/
107+
export type SliderEmits = {
108+
/**
109+
* 开始拖动滑块时触发
110+
*/
111+
dragstart: [event: SliderDragEvent]
112+
113+
/**
114+
* 拖动滑块过程中触发
115+
*/
116+
dragmove: [event: SliderDragEvent]
117+
118+
/**
119+
* 结束拖动滑块时触发
120+
*/
121+
dragend: [event: SliderDragEvent]
122+
123+
/**
124+
* 更新滑块值时触发,用于v-model绑定
125+
*/
126+
'update:modelValue': [value: SliderValue]
127+
}
128+
97129
export type SliderExpose = {
98130
/**
99131
* 初始化slider宽度
100132
*/
101133
initSlider: () => void
102134
}
103135

104-
export type SliderInstance = ComponentPublicInstance<SliderExpose>
136+
export type SliderProps = ExtractPropTypes<typeof sliderProps>
137+
138+
export type SliderInstance = ComponentPublicInstance<SliderProps, SliderExpose>

0 commit comments

Comments
 (0)