Slider 슬라이더
LhSlider는 구간 입력 컨트롤을 생성하는 슬라이더 컴포넌트로, 사용자는 min과 max 사이를 드래그하여 값을 선택할 수 있습니다.
기본 사용법
기본 사용법
vue
<script setup lang="ts">
import { ref } from 'vue'
const baseValue = ref(0)
</script>
<template>
<LhSlider v-model="baseValue" />
</template>vue
<script>
export default {
data() {
return { baseValue: 0 }
},
}
</script>
<template>
<LhSlider v-model="baseValue" />
</template>커스텀 범위
커스텀 범위
vue
<script setup lang="ts">
import { ref } from 'vue'
const rangeValue = ref(50)
</script>
<template>
<LhSlider v-model="rangeValue" :min="10" :max="200" />
</template>vue
<script>
export default {
data() {
return { rangeValue: 50 }
},
}
</script>
<template>
<LhSlider v-model="rangeValue" :min="10" :max="200" />
</template>범위 선택
범위 선택
vue
<script setup lang="ts">
import { ref } from 'vue'
const rangeMode = ref([20, 50])
</script>
<template>
<LhSlider v-model="rangeMode" range />
</template>vue
<script>
export default {
data() {
return { rangeMode: [20, 50] }
},
}
</script>
<template>
<LhSlider v-model="rangeMode" range />
</template>스텝
스텝
vue
<script setup lang="ts">
import { ref } from 'vue'
const stepValue = ref(0)
</script>
<template>
<LhSlider v-model="stepValue" :step="10" />
</template>vue
<script>
export default {
data() {
return { stepValue: 0 }
},
}
</script>
<template>
<LhSlider v-model="stepValue" :step="10" />
</template>표시
표시
0°C25°C50°C75°C100°C
vue
<script setup lang="ts">
import { ref } from 'vue'
const marksValue = ref(0)
const customMarks = {
0: '0°C',
25: '25°C',
50: '50°C',
75: '75°C',
100: '100°C',
}
</script>
<template>
<LhSlider v-model="marksValue" :marks="customMarks" />
</template>vue
<script>
export default {
data() {
return {
marksValue: 0,
customMarks: {
0: '0°C',
25: '25°C',
50: '50°C',
75: '75°C',
100: '100°C',
},
}
},
}
</script>
<template>
<LhSlider v-model="marksValue" :marks="customMarks" />
</template>입력 표시
입력 표시
50
vue
<script setup lang="ts">
import { ref } from 'vue'
const inputValue = ref(50)
</script>
<template>
<LhSlider v-model="inputValue" show-input />
</template>vue
<script>
export default {
data() {
return { inputValue: 50 }
},
}
</script>
<template>
<LhSlider v-model="inputValue" show-input />
</template>비활성화
비활성화
vue
<script setup lang="ts">
import { ref } from 'vue'
const disabledValue = ref(50)
</script>
<template>
<LhSlider v-model="disabledValue" :value="50" disabled />
</template>vue
<script>
export default {
data() {
return { disabledValue: 50 }
},
}
</script>
<template>
<LhSlider v-model="disabledValue" :value="50" disabled />
</template>크기
크기
vue
<script setup lang="ts">
import { ref } from 'vue'
const smallValue = ref(50)
const mediumValue = ref(50)
const largeValue = ref(50)
</script>
<template>
<LhSlider v-model="smallValue" size="small" />
<LhSlider v-model="mediumValue" size="medium" />
<LhSlider v-model="largeValue" size="large" />
</template>vue
<script>
export default {
data() {
return {
smallValue: 50,
mediumValue: 50,
largeValue: 50,
}
},
}
</script>
<template>
<LhSlider v-model="smallValue" size="small" />
<LhSlider v-model="mediumValue" size="medium" />
<LhSlider v-model="largeValue" size="large" />
</template>커스텀 테마
슬라이더에 커스텀 테마 색상을 적용할 수 있습니다.
青花瓷 (ceramic blue) 테마
vue
<script setup lang="ts">
import { ref } from 'vue'
import { LhConfigProvider, LhSlider } from '@lh-ui/vue3'
const value = ref(50)
const cerblueTheme = {
'primary-color': '#2B4C7C',
'primary-color-hover': '#3D649E',
'primary-color-bg': '#E8EDF3',
}
</script>
<template>
<LhConfigProvider :theme-vars="cerblueTheme">
<LhSlider v-model="value" />
</LhConfigProvider>
</template>vue
<script>
import { LhConfigProvider, LhSlider } from '@lh-ui/vue3'
export default {
data() {
return {
value: 50,
cerblueTheme: {
'primary-color': '#2B4C7C',
'primary-color-hover': '#3D649E',
'primary-color-bg': '#E8EDF3',
},
}
},
}
</script>
<template>
<LhConfigProvider :theme-vars="cerblueTheme">
<LhSlider v-model="value" />
</LhConfigProvider>
</template>다국어
다국어
vue
<script setup lang="ts">
import { ref } from 'vue'
import { LhConfigProvider, LhSlider } from '@lh-ui/vue3'
import { zhCN } from '@lh-ui/vue3'
import { enUS } from '@lh-ui/vue3'
const locale = ref('zh-CN')
const value = ref(50)
</script>
<template>
<!-- 언어 팩 구성 -->
<LhConfigProvider :locale="locale === 'zh-CN' ? zhCN : enUS">
<LhSlider v-model="value" />
</LhConfigProvider>
</template>vue
<script>
import { LhConfigProvider, LhSlider } from '@lh-ui/vue3'
import { zhCN } from '@lh-ui/vue3'
import { enUS } from '@lh-ui/vue3'
export default {
data() {
return {
locale: 'zh-CN',
value: 50,
zhCN: zhCN,
enUS: enUS,
}
},
}
</script>
<template>
<!-- 언어 팩 구성 -->
<LhConfigProvider :locale="locale === 'zh-CN' ? zhCN : enUS">
<LhSlider v-model="value" />
</LhConfigProvider>
</template>Slider API
Props
| 프로퍼티 | 설명 | 타입 | 기본값 |
|---|---|---|---|
| modelValue | 슬라이더 값 | number | [number, number] | null |
| min | 최솟값 | number | 0 |
| max | 최댓값 | number | 100 |
| step | 스텝 값 | number | 1 |
| disabled | 비활성화 여부 | boolean | false |
| range | 범위 선택 활성화 여부 | boolean | false |
| showInput | 입력 표시 여부 | boolean | false |
| size | 크기 | "small" | "medium" | "large" | "mini" | "x-large" | 'medium' |
| marks | 표시점 | { [x: number]: string; } | — |
| sx | 빠른 레이아웃 속성 (예: { mt: 2, w: '50%' }), 인라인 스타일로 변환되어 루트 요소에 적용 | LhSxProps | — |
Events
| 이벤트명 | 설명 | 타입 |
|---|---|---|
| update:model-value | 값이 변경될 때 트리거 | (value: number | [number, number]) => void |
| change | 값 변경이 확정될 때 트리거 | (value: number | [number, number]) => void |
타입 정의
이 컴포넌트가 외부로 노출하는 TypeScript 타입 구조는 다음과 같습니다 (packages/components/slider/src/types.ts와 @lh-ui/share/core/* 소스에서 자동 추출, 각 항목을 펼쳐 전체 정의를 확인하세요. 프로퍼티 설명은 위쪽 Props 표를 참조하세요):
LhSliderProps
ts
export interface LhSliderProps {
modelValue?: number | [number, number] | null
min?: number
max?: number
step?: number
disabled?: boolean
range?: boolean
showInput?: boolean
size?: LhComponentSize
marks?: Record<number, string>
/** sx 빠른 레이아웃 속성 */
sx?: LhSxProps
}LhSliderSize
ts
export type LhSliderSize = LhComponentSizeLhComponentSize (출처: @lh-ui/share/core/shared)
ts
export type LhComponentSize = (typeof LH_SIZE_CONST)[keyof typeof LH_SIZE_CONST]