Element UI Plus 的 ElSlider(滑塊組件)用於在指定數值範圍內進行單值/範圍選擇,支持步長、自定義樣式、禁用等功能,是表單、篩選、配置類場景的高頻組件。以下是完整的使用指南,包含基礎用法、進階定製及核心 API。
一、基礎用法(核心)
ElSlider 核心通過 v-model 綁定數值,默認是單滑塊,取值範圍由 min(最小值,默認 0)和 max(最大值,默認 100)控制。
<template>
<!-- 基礎單滑塊 -->
<el-slider v-model="sliderValue" />
<!-- 綁定值展示 -->
<div class="mt-2">當前值:{{ sliderValue }}</div>
</template>
<script setup>
import { ref } from 'vue'
// 初始化滑塊值(默認 0)
const sliderValue = ref(50)
</script>
二、進階定製(常用場景)
1. 自定義取值範圍與步長
min/max:設置滑塊的最小/最大值;step:設置每次滑動的步長(默認 1,支持小數);show-input:顯示輸入框,可手動輸入數值(替代純滑動)。
<el-slider
v-model="stepValue"
min="0"
max="10"
step="0.5" <!-- 步長 0.5 -->
show-input <!-- 顯示輸入框 -->
/>
<script setup>
const stepValue = ref(2.5)
</script>
2. 範圍滑塊(雙滑塊)
通過 range 屬性開啓雙滑塊,此時 v-model 綁定的是數組([最小值, 最大值]),適用於區間篩選(如價格、時間範圍)。
<el-slider
v-model="rangeValue"
range <!-- 開啓範圍滑塊 -->
min="0"
max="1000"
step="10"
/>
<script setup>
// 初始化範圍值 [最小值, 最大值]
const rangeValue = ref([100, 500])
</script>
3. 顯示刻度與標籤
show-ticks:顯示刻度線;show-tooltip:滑動時顯示懸浮提示(默認開啓,可設為false關閉);format-tooltip:自定義懸浮提示的顯示內容。
<el-slider
v-model="tickValue"
min="0"
max="100"
step="20"
show-ticks <!-- 顯示刻度 -->
:format-tooltip="(val) => `${val}%`" <!-- 自定義提示(如加單位) -->
/>
<script setup>
const tickValue = ref(40)
</script>
4. 禁用狀態
通過 disabled 屬性禁用滑塊(無法滑動、輸入框只讀),支持動態綁定。
<!-- 固定禁用 -->
<el-slider v-model="disabledValue" disabled />
<!-- 動態禁用 -->
<el-slider v-model="disabledValue" :disabled="isDisabled" />
<script setup>
const disabledValue = ref(30)
const isDisabled = ref(true) // 動態控制禁用
</script>
5. 豎向滑塊
通過 vertical 屬性將滑塊改為豎向排列,需手動設置滑塊高度(否則顯示異常)。
<template>
<div style="height: 200px;"> <!-- 必須設置容器高度 -->
<el-slider
v-model="verticalValue"
vertical <!-- 豎向滑塊 -->
min="0"
max="100"
/>
</div>
</template>
<script setup>
const verticalValue = ref(60)
</script>
6. 自定義顏色(主題)
active-color:滑塊選中區域的顏色;inactive-color:滑塊未選中區域的顏色;disabled-active-color/disabled-inactive-color:禁用狀態下的對應顏色。
<el-slider
v-model="colorValue"
active-color="#13ce66" <!-- 選中區綠色 -->
inactive-color="#ff4949" <!-- 未選中區紅色 -->
/>
<script setup>
const colorValue = ref(70)
</script>
7. 綁定事件
@change:滑塊值確認改變時觸發(滑動停止/輸入框回車);@input:滑塊值實時改變時觸發(滑動過程中持續觸發)。
<el-slider
v-model="eventValue"
@input="handleInput" <!-- 實時觸發 -->
@change="handleChange" <!-- 確認改變觸發 -->
/>
<script setup>
const eventValue = ref(50)
// 實時滑動觸發
const handleInput = (val) => {
console.log('實時值:', val)
}
// 確認改變觸發(核心,用於提交/接口請求)
const handleChange = (val) => {
console.log('最終值:', val)
// 可在此處觸發篩選、配置保存等邏輯
}
</script>
8. 禁用部分區間
通過 marks 結合 disabled 實現區間禁用,marks 用於標記關鍵值,配合 inverse-tooltip 優化提示。
<el-slider
v-model="markValue"
:marks="marks" <!-- 標記刻度 -->
:disabled="disabledRange" <!-- 禁用指定區間 -->
/>
<script setup>
const markValue = ref(50)
// 標記刻度(key 為數值,value 為顯示文本)
const marks = {
0: '0%',
20: '20%',
50: '50%',
80: '80%',
100: '100%'
}
// 禁用 0-20 和 80-100 區間
const disabledRange = (value) => {
return value < 20 || value > 80
}
</script>
三、完整示例(整合所有用法)
<template>
<div class="slider-demo" style="padding: 20px;">
<h3>基礎單滑塊</h3>
<el-slider v-model="baseValue" />
<h3 class="mt-4">範圍滑塊(價格篩選)</h3>
<el-slider
v-model="rangeValue"
range
min="0"
max="1000"
step="50"
show-input
:format-tooltip="(val) => `¥${val}`"
/>
<div class="mt-2">價格範圍:{{ rangeValue[0] }} - {{ rangeValue[1] }} 元</div>
<h3 class="mt-4">帶刻度+自定義顏色</h3>
<el-slider
v-model="tickValue"
min="0"
max="100"
step="20"
show-ticks
active-color="#409eff"
inactive-color="#e6a23c"
/>
<h3 class="mt-4">豎向滑塊(音量調節)</h3>
<div style="height: 200px; display: flex; align-items: center;">
<el-slider
v-model="verticalValue"
vertical
min="0"
max="100"
show-tooltip
/>
<span class="ml-4">音量:{{ verticalValue }}%</span>
</div>
<h3 class="mt-4">事件監聽</h3>
<el-slider
v-model="eventValue"
@input="handleInput"
@change="handleChange"
/>
<div class="mt-2">實時值:{{ realTimeValue }} | 最終值:{{ finalValue }}</div>
</div>
</template>
<script setup>
import { ref } from 'vue'
// 基礎滑塊
const baseValue = ref(50)
// 範圍滑塊
const rangeValue = ref([200, 600])
// 帶刻度滑塊
const tickValue = ref(60)
// 豎向滑塊
const verticalValue = ref(80)
// 事件監聽滑塊
const eventValue = ref(50)
const realTimeValue = ref(50)
const finalValue = ref(50)
// 實時輸入事件
const handleInput = (val) => {
realTimeValue.value = val
}
// 確認改變事件
const handleChange = (val) => {
finalValue.value = val
console.log('滑塊最終值:', val)
}
</script>
四、核心 API 參考
1. Props(屬性)
|
屬性名
|
説明
|
類型
|
默認值
|
|
|
綁定值(單滑塊:數值;範圍滑塊:數組)
|
number / [number, number]
|
0
|
|
|
最小值
|
number
|
0
|
|
|
最大值
|
number
|
100
|
|
|
步長
|
number
|
1
|
|
|
是否為範圍滑塊
|
boolean
|
false
|
|
|
是否豎向顯示
|
boolean
|
false
|
|
|
是否禁用
|
boolean
|
false
|
|
|
是否顯示輸入框
|
boolean
|
false
|
|
|
輸入框是否顯示增減按鈕
|
boolean
|
true
|
|
|
是否顯示刻度線
|
boolean
|
false
|
|
|
是否顯示懸浮提示
|
boolean
|
true
|
|
|
自定義懸浮提示內容
|
Function(val)
|
—
|
|
|
選中區域顏色
|
string
|
#409eff
|
|
|
未選中區域顏色
|
string
|
#e5e7eb
|
|
|
刻度標記({ key: value })
|
object
|
—
|
|
|
懸浮提示自定義類名
|
string
|
—
|
2. Events(事件)
|
事件名
|
説明
|
回調參數
|
|
|
滑塊值實時改變時觸發
|
當前值(數值/數組)
|
|
|
滑塊值確認改變時觸發
|
當前值(數值/數組)
|
|
|
滑塊開始拖動時觸發
|
當前值(數值/數組)
|
|
|
滑塊結束拖動時觸發
|
當前值(數值/數組)
|
五、注意事項
- 豎向滑塊必須設置容器高度,否則無法正常顯示;
- 範圍滑塊的
v-model必須綁定數組,初始值需為[minVal, maxVal]格式; step支持小數,但需保證(max - min)能被step整除(避免精度問題);show-input開啓後,輸入框支持回車確認值,失去焦點也會自動校驗並同步到滑塊;marks標記的數值需在min/max範圍內,否則不顯示。