Skip to content

Commit fc3e4ef

Browse files
feat: ✨ Slider暴露initSlider方法用于外部初始化slider宽度信息
Closes: #344
1 parent e58f111 commit fc3e4ef

6 files changed

Lines changed: 63 additions & 7 deletions

File tree

docs/component/drop-menu.md

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -62,8 +62,9 @@ function handleChange2({ value }) {
6262
```html
6363
<wd-drop-menu>
6464
<wd-drop-menu-item v-model="value" :options="option" @change="handleChange" />
65-
<wd-drop-menu-item title="筛选" ref="dropMenu">
65+
<wd-drop-menu-item title="筛选" ref="dropMenu" @opened="handleOpened">
6666
<view>
67+
<wd-slider v-model="sliderValue" ref="slider" />
6768
<wd-cell title="标题文字" value="内容" />
6869
<wd-cell title="标题文字" label="描述信息" value="内容" />
6970
<wd-button block size="large" suck @click="confirm">主要按钮</wd-button>
@@ -74,9 +75,11 @@ function handleChange2({ value }) {
7475

7576
```typescript
7677
const dropMenu = ref()
78+
const slider = ref<SliderInstance>() // slider 1.2.25支持
7779

7880

7981
const value = ref<number>(0)
82+
const sliderValue = ref<number>(30)
8083
const option = ref<Record<string, any>>([
8184
{ label: '全部商品', value: 0 },
8285
{ label: '新款商品', value: 1 },
@@ -90,6 +93,10 @@ function confirm() {
9093
dropMenu.value.close()
9194
}
9295

96+
function handleOpened() {
97+
slider.value?.initSlider()
98+
}
99+
93100
```
94101

95102
## 自定义菜单选项

docs/component/slider.md

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,4 @@
1+
12
<frame/>
23

34
# Slider 滑块
@@ -75,6 +76,15 @@ const value = ref<number[]>([10, 30])
7576
| dragmove | 移动滑块时触发 | `{ value }` | - |
7677
| dragend | 移动结束时触发 | `{ value }` | - |
7778

79+
80+
## Methods
81+
82+
对外暴露函数
83+
84+
| 事件名称 | 说明 | 参数 | 最低版本 |
85+
|--------|------|-----|---------|
86+
| initSlider | 初始化slider宽度数据 | - | 1.2.25 |
87+
7888
## 外部样式类
7989
| 类名 | 说明 | 最低版本 |
8090
|-----|------|--------|

src/pages/dropMenu/Index.vue

Lines changed: 10 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10,8 +10,9 @@
1010
<demo-block title="自定义菜单内容" transparent>
1111
<wd-drop-menu>
1212
<wd-drop-menu-item v-model="value3" :options="option1" @change="handleChange3" />
13-
<wd-drop-menu-item ref="dropMenu" title="筛选">
13+
<wd-drop-menu-item ref="dropMenu" title="筛选" @opened="handleOpened">
1414
<view>
15+
<wd-slider v-model="valuetest" ref="slider" />
1516
<wd-cell title="标题文字" value="内容" />
1617
<wd-cell title="标题文字" label="描述信息" value="内容" />
1718
<view style="padding: 0 10px 20px; box-sizing: border-box">
@@ -50,10 +51,14 @@
5051
import { ref } from 'vue'
5152
5253
import { useQueue } from '@/uni_modules/wot-design-uni'
54+
import type { SliderInstance } from '@/uni_modules/wot-design-uni/components/wd-slider/types'
5355
5456
const { closeOutside } = useQueue()
5557
5658
const dropMenu = ref()
59+
const slider = ref<SliderInstance>()
60+
61+
const valuetest = ref<number>(30)
5762
5863
const show = ref<boolean>(false)
5964
const value1 = ref<number>(1)
@@ -76,6 +81,10 @@ const option2 = ref<Record<string, any>[]>([
7681
{ label: '上架时间', value: 2 }
7782
])
7883
84+
function handleOpened() {
85+
slider.value?.initSlider()
86+
}
87+
7988
function handleChange1({ value }: any) {
8089
console.log(value)
8190
}

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

Lines changed: 20 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,14 @@
1-
import type { PropType } from 'vue'
2-
import { baseProps, makeBooleanProp, makeNumberProp, makeNumericProp, makeStringProp } from '../common/props'
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'
11+
import { baseProps, makeBooleanProp, makeNumberProp, makeStringProp } from '../common/props'
312

413
export const sliderProps = {
514
...baseProps,
@@ -84,3 +93,12 @@ export const sliderProps = {
8493
default: 0
8594
}
8695
}
96+
97+
export type SliderExpose = {
98+
/**
99+
* 初始化slider宽度
100+
*/
101+
initSlider: () => void
102+
}
103+
104+
export type SliderInstance = ComponentPublicInstance<SliderExpose>

src/uni_modules/wot-design-uni/components/wd-slider/wd-slider.vue

Lines changed: 14 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -59,7 +59,7 @@ import { computed, getCurrentInstance, onMounted, ref } from 'vue'
5959
import { getRect, isArray, isDef, isNumber, uuid } from '../common/util'
6060
import { useTouch } from '../composables/useTouch'
6161
import { watch } from 'vue'
62-
import { sliderProps } from './types'
62+
import { sliderProps, type SliderExpose } from './types'
6363
6464
const props = defineProps(sliderProps)
6565
const emit = defineEmits(['dragstart', 'dragmove', 'dragend', 'update:modelValue'])
@@ -196,13 +196,20 @@ const buttonRightStyle = computed(() => {
196196
})
197197
198198
onMounted(() => {
199+
initSlider()
200+
})
201+
202+
/**
203+
* 初始化slider宽度
204+
*/
205+
function initSlider() {
199206
getRect(`#${sliderId.value}`, false, proxy).then((data) => {
200207
// trackWidth: 轨道全长
201208
trackWidth.value = Number(data.width)
202209
// trackLeft: 轨道距离左侧的距离
203210
trackLeft.value = Number(data.left)
204211
})
205-
})
212+
}
206213
207214
function onTouchStart(event: any) {
208215
const { disabled, modelValue } = props
@@ -224,6 +231,7 @@ function onTouchMove(event: any) {
224231
// 移动间距 deltaX 就是向左(-)向右(+)
225232
const diff = (touchLeft.deltaX.value / trackWidth.value) * (maxValue.value - minValue.value)
226233
newValue.value = startValue.value + diff
234+
227235
// 左滑轮滑动控制
228236
leftBarSlider(newValue.value)
229237
emit('dragmove', {
@@ -340,6 +348,10 @@ function calcBarPercent() {
340348
leftBarPercent.value = percent
341349
barStyle.value = `width: ${percent}%; height: ${barHeight.value};`
342350
}
351+
352+
defineExpose<SliderExpose>({
353+
initSlider
354+
})
343355
</script>
344356
<style lang="scss" scoped>
345357
@import './index.scss';

src/uni_modules/wot-design-uni/components/wd-table-col/wd-table-col.vue

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -27,7 +27,7 @@ export default {
2727
}
2828
</script>
2929
<script lang="ts" setup>
30-
import { type CSSProperties, computed, ref, reactive } from 'vue'
30+
import { type CSSProperties, computed, ref } from 'vue'
3131
import { addUnit, isDef, objToStyle, isOdd, isFunction } from '../common/util'
3232
import { tableColumnProps, type SortDirection } from './types'
3333
import { useParent } from '../composables/useParent'

0 commit comments

Comments
 (0)