vue3 vite element根据自定义数据实现离散滑块方式

 更新时间:2026年07月02日 09:15:42   作者:jjw_zyfx  
这段描述主要介绍了main.js与app.vue文件的协同作用,以及运行效果展示,适合前端开发人员参考学习

版本

"element-plus": "^2.11.9",
 "vue": "^3.5.13"
 "@vitejs/plugin-vue": "^5.2.1",
 "vite": "^6.0.11",
 "vite-plugin-vue-devtools": "^7.7.1"

main.js中的内容

import './assets/main.css'

import { createApp } from 'vue'
import App from './App.vue'
import ElementPlus from 'element-plus'
import 'element-plus/dist/index.css'

const app = createApp(App)

app.use(ElementPlus)
app.mount('#app')

app.vue中的内容

如下:

<template>
  <div class="discrete-slider-container">
    <div class="slider-section">
      <div class="slider-wrapper">
        <div class="vertical-layout">
          <!-- 标签区域 - 反转显示 -->
          <div class="discrete-labels">
            <div
                v-for="(value, index) in reversedValues"
                :key="index"
                class="discrete-label"
                :class="{ active: sliderIndex === (discreteValues.length - 1 - index) }"
                @click="handleLabelClick(discreteValues.length - 1 - index)"
            >
              {{ value }}
            </div>
          </div>

          <!-- 滑块区域 -->
          <div class="slider-area">
            <el-slider
                v-model="sliderIndex"
                :min="0"
                :max="discreteValues.length - 1"
                :step="1"
                :show-stops="true"
                :marks="sliderMarks"
                :show-tooltip="true"
                :format-tooltip="formatTooltip"
                @change="handleSliderChange"
                vertical
                height="300px"
            />
          </div>
        </div>
      </div>
    </div>
  </div>
</template>

<script setup>
import { ref, computed, onMounted } from 'vue'
import { ElSlider } from 'element-plus'

// 离散值数组
const discreteValues = [10, 30, 100, 150, 400]

// 当前滑块索引
const sliderIndex = ref(0)

// 反转后的值数组(用于显示)
const reversedValues = computed(() => {
  return [...discreteValues].reverse()
})

// 滑块刻度配置
const sliderMarks = computed(() => {
  const marks = {}
  discreteValues.forEach((value, index) => {
    marks[index] = {
      style: {
        color: '#409EFF',
        fontSize: '12px',
        marginLeft: '8px'
      },
      label: value
    }
  })
  return marks
})

// 格式化工具提示
const formatTooltip = (val) => {
  return discreteValues[val]
}

// 处理滑块变化
const handleSliderChange = (value) => {
  console.log('滑块值变化:', discreteValues[value])
}

// 处理标签点击
const handleLabelClick = (index) => {
  sliderIndex.value = index
}

// 组件挂载时初始化
onMounted(() => {
  console.log('离散滑块组件已加载,可用值:', discreteValues)
})
</script>

<style scoped>
.discrete-slider-container {
  max-width: 800px;
  margin: 0 auto;
  padding: 20px;
  font-family: 'Helvetica Neue', Arial, sans-serif;
}

.slider-section {
  background: white;
  padding: 30px;
  border-radius: 12px;
  box-shadow: 0 4px 20px rgba(0, 0, 0, 0.08);
  margin-bottom: 20px;
}

.slider-wrapper {
  position: relative;
}

.vertical-layout {
  display: flex;
  align-items: center;
  gap: 40px;
  justify-content: center;
}

.discrete-labels {
  display: flex;
  flex-direction: column;
  gap: 10px;
}

.discrete-label {
  padding: 12px 20px;
  border-radius: 8px;
  cursor: pointer;
  transition: all 0.3s ease;
  font-size: 14px;
  font-weight: 500;
  color: #666;
  border: 1px solid transparent;
  text-align: center;
  min-width: 80px;
}

.discrete-label:hover {
  background-color: #f0f9ff;
  color: #409EFF;
  border-color: #409EFF;
}

.discrete-label.active {
  background-color: #409EFF;
  color: white;
  transform: scale(1.05);
}

.slider-area {
  display: flex;
  align-items: center;
  justify-content: center;
  padding: 20px 0;
}

/* 调整 Element Plus 垂直滑块样式 */
:deep(.el-slider--vertical) {
  height: 300px;
}

:deep(.el-slider__marks-text) {
  margin-left: 12px;
}
</style>

运行后的效果

如下:


总结

以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。

相关文章

  • vue如何根据条件判断按钮是否可以点击

    vue如何根据条件判断按钮是否可以点击

    这篇文章主要介绍了vue如何根据条件判断按钮是否可以点击,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2022-04-04
  • 使用Vue中 v-for循环列表控制按钮隐藏显示功能

    使用Vue中 v-for循环列表控制按钮隐藏显示功能

    这篇文章主要介绍了使用Vue中 v-for循环列表控制按钮隐藏显示功能,需要的朋友可以参考下
    2019-04-04
  • vue中动态获取变量名并赋值方式

    vue中动态获取变量名并赋值方式

    这篇文章主要介绍了vue中动态获取变量名并赋值方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2025-04-04
  • vue3数据更新而视图未更新问题解决

    vue3数据更新而视图未更新问题解决

    本文主要介绍了vue3 解决数据更新而视图未更新问题,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2023-10-10
  • Vue唯一可以更改vuex实例中state数据状态的属性对象Mutation的讲解

    Vue唯一可以更改vuex实例中state数据状态的属性对象Mutation的讲解

    今天小编就为大家分享一篇关于Vue唯一可以更改vuex实例中state数据状态的属性对象,小编觉得内容挺不错的,现在分享给大家,具有很好的参考价值,需要的朋友一起跟随小编来看看吧
    2019-01-01
  • Vue.js中数组变动的检测详解

    Vue.js中数组变动的检测详解

    这篇文章给大家主要介绍了Vue.js中数组变动的检测,文中给出了详细的示例代码和过程介绍,相信会对大家的理解和学习很有帮助,有需要的朋友们下面来一起看看吧。
    2016-10-10
  • vue+element-ui表格封装tag标签使用插槽

    vue+element-ui表格封装tag标签使用插槽

    这篇文章主要介绍了vue+element-ui表格封装tag标签使用插槽,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-06-06
  • 详解vue添加删除元素的方法

    详解vue添加删除元素的方法

    本篇文章给大家分享了vue添加删除元素的方法以及相关实例代码,有兴趣的朋友参考一下。
    2018-06-06
  • 一文详解Vue3内置组件的使用

    一文详解Vue3内置组件的使用

    Vue3内置组件是一组预定义的组件,直接嵌入框架,无需手动导入即可在模板中使用,下面这篇文章主要介绍了Vue3内置组件使用的相关资料,文中通过代码介绍的非常详细,需要的朋友可以参考下
    2025-09-09
  • vue3的自定义指令directives实现

    vue3的自定义指令directives实现

    本文主要介绍了vue3的自定义指令directives实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2022-07-07

最新评论