SliderRange 双滑块范围选择器

SliderRange 双滑块范围选择器

一个轻量级但功能强大的双滑块范围选择器组件,完美适配移动端和PC端,为您的项目提供直观的范围选择体验。
在这里插入图片描述

🌟 特性

  • ✨ 灵活的范围设置 - 支持自定义最大最小值
  • 📏 精确的步长控制 - 可设置数值变化的最小单位
  • 🎨 丰富的样式定制 - 支持自定义滑块、轨道样式
  • 📱 完美的跨端适配 - 支持H5/App/小程序多端使用
  • 🔄 双向绑定支持 - 支持v-model语法
  • 🎯 刻度线显示 - 直观的数值参考
  • ⌨️ 键盘操作支持 - 提升无障碍体验
  • 🚫 禁用状态 - 支持只读模式

📦 安装

下载使用

llt-slider-range 组件复制到你的项目中即可。

🚀 快速开始

H5/App使用示例

<template>
  <llt-slider-range v-model="rangeValue" />
</template>

<script>
export default {
  data() {
    return {
      rangeValue: [30, 50] // 设置初始范围值
    }
  }
}
</script>

微信小程序使用示例

<template>
  <llt-slider-range
    :model-value="rangeValue" 
    @change="handleChange"
  />
</template>

<script>
export default {
  data() {
    return {
      rangeValue: [30, 50]
    }
  },
  methods: {
    handleChange(val) {
      this.rangeValue = val
    }
  }
}
</script>

📝 API文档

Props 属性

属性名类型默认值说明
modelValue/v-modelArray[0, 100]当前选中的范围值
minNumber0最小可选值
maxNumber100最大可选值
stepNumber1步长,必须大于0
disabledBooleanfalse是否禁用
backgroundColorString‘#F6F6F6’滑动条背景色
activeColorString‘#4DB8F6’选中范围的颜色
blockSizeNumber48滑块大小(rpx)
blockColorString‘#fff’滑块颜色
formatFunctionval => val数值格式化函数

Events 事件

事件名说明回调参数
update:modelValue值更新时触发(value: number[])
change值变化时触发(value: number[])

💡 高级用法

价格范围选择器

<template>
  <llt-slider-range
    v-model="priceRange"
    :min="0"
    :max="10000"
    :step="100"
    :format="formatPrice"
    active-color="#FF6B6B"
  />
</template>

<script>
export default {
  data() {
    return {
      priceRange: [1000, 5000]
    }
  },
  methods: {
    formatPrice(val) {
      return `¥${val}`
    }
  }
}
</script>

温度选择器

<template>
  <llt-slider-range
    v-model="tempRange"
    :min="-20"
    :max="40"
    :format="val => `${val}°C`"
    active-color="#2196F3"
  />
</template>

⚠️ 注意事项

  1. 确保传入的范围值在 min 和 max 之间
  2. step 值必须为正数
  3. 移动端使用时建议适当增大 blockSize 以提升触控体验
  4. 小程序端需使用 model-value + change 事件方式实现双向绑定
  5. 建议在父容器设置合适的宽度,以获得最佳显示效果

🔗 相关链接

📄 License

MIT


如果这个组件对你有帮助,欢迎 star ⭐️ 支持一下!

以下是使用原生JavaScript以面向对象方式实现Slider滑块的开启范围选择用法的示例代码: ```javascript class Slider { constructor(options) { this.ele = document.querySelector(options.ele); this.min = options.min; this.max = options.max; this.value = options.value || [this.min, this.max]; this.setTips = options.setTips || null; this.done = options.done || null; this.sliderRange = null; this.sliderThumbStart = null; this.sliderThumbEnd = null; this.draggingStart = false; this.draggingEnd = false; this.init(); } init() { this.createSlider(); this.updateSlider(); this.sliderThumbStart.addEventListener('mousedown', this.startDraggingStart.bind(this)); this.sliderThumbEnd.addEventListener('mousedown', this.startDraggingEnd.bind(this)); document.addEventListener('mousemove', this.handleDragging.bind(this)); document.addEventListener('mouseup', this.stopDragging.bind(this)); } createSlider() { this.sliderRange = document.createElement('div'); this.sliderRange.classList.add('slider-range'); this.sliderThumbStart = document.createElement('div'); this.sliderThumbStart.classList.add('slider-thumb'); this.sliderThumbStart.classList.add('slider-thumb-start'); this.sliderThumbEnd = document.createElement('div'); this.sliderThumbEnd.classList.add('slider-thumb'); this.sliderThumbEnd.classList.add('slider-thumb-end'); this.ele.appendChild(this.sliderRange); this.ele.appendChild(this.sliderThumbStart); this.ele.appendChild(this.sliderThumbEnd); } updateSlider() { const rangeWidth = this.ele.clientWidth; const startPercentage = ((this.value[0] - this.min) / (this.max - this.min)) * 100; const endPercentage = ((this.value[1] - this.min) / (this.max - this.min)) * 100; this.sliderRange.style.left = `${startPercentage}%`; this.sliderRange.style.width = `${endPercentage - startPercentage}%`; } startDraggingStart() { this.draggingStart = true; } startDraggingEnd() { this.draggingEnd = true; } handleDragging(event) { if (this.draggingStart || this.draggingEnd) { const rangeWidth = this.ele.clientWidth; const startX = this.ele.getBoundingClientRect().left; const endX = startX + rangeWidth; let newValue; if (this.draggingStart) { newValue = ((event.clientX - startX) / rangeWidth) * (this.max - this.min) + this.min; if (newValue < this.min) { newValue = this.min; } else if (newValue > this.value[1]) { newValue = this.value[1]; } this.value[0] = newValue; this.updateSlider(); } if (this.draggingEnd) { newValue = ((event.clientX - startX) / rangeWidth) * (this.max - this.min) + this.min; if (newValue > this.max) { newValue = this.max; } else if (newValue < this.value[0]) { newValue = this.value[0]; } this.value[1] = newValue; this.updateSlider(); } if (typeof this.setTips === 'function') { this.setTips(this.value); } } } stopDragging() { if (this.draggingStart || this.draggingEnd) { this.draggingStart = false; this.draggingEnd = false; if (typeof this.done === 'function') { this.done(this.value); } alert(`当前的value参数为:${this.value}`); } } } // 使用示例 const slider = new Slider({ ele: '.slider-container', min: 0, max: 100, value: [30, 60], setTips: (value) => { console.log(`当前的value参数为:${value}`); }, done: (value) => { console.log(`滑块拖拽完毕,当前的value参数为:${value}`); } }); ``` 在上述示例中,我们通过`class Slider`定义了一个Slider类,构造函数中接收了`options`对象作为参数,包含了初始化Slider时的各种配置信息。在`init`方法中,我们创建了滑块的DOM元素,并添加了相应的事件监听器。通过`updateSlider`方法更新滑块的位置和宽度。 在拖动滑块过程中,会触发`handleDragging`方法来更新滑块的值和位置,并通过`setTips`方法设置提示文本。当拖动结束时,会触发`stopDragging`方法,其中会调用`done`方法进行回调,并使用`alert`模拟提示弹窗。 你可以根据需要修改样式和事件处理逻辑。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值