更新记录

1.0.4(2023-12-18)

  • 修复自动计算刻度间隔可能计算为0,导致卡死的问题

1.0.3(2023-11-07)

  • 修复实际应用到 popup 等默认隐藏场景时,无法正确获取组件 width 的问题

1.0.2(2023-11-06)

  • 增加 start、end 事件
查看更多

平台兼容性

Vue2 Vue3
×
App 快应用 微信小程序 支付宝小程序 百度小程序 字节小程序 QQ小程序
HBuilderX 3.95 app-vue × × × × ×
钉钉小程序 快手小程序 飞书小程序 京东小程序
× × × ×
H5-Safari Android Browser 微信浏览器(Android) QQ浏览器(Android) Chrome IE Edge Firefox PC-Safari

slider-range

区间滑动选择

属性说明

属性名 类型 默认值 说明
value Number/Array[2] [] 初始值,为 number 时表示滑动选择器,为 array 时表示区间滑动选择器
valueType String max 当 value 为 number 时,可滑动的是哪个值,可选值:min、max,默认 max
min Number 0 最小值(最左侧值)默认 0
max Number 100 最大值(最右侧值)默认 100
step Number 1 步长,为 0 时不设步长,默认为 1,支持步长为浮点数,不设步长时返回两位浮点数,想要获取几位浮点数就把步长设置为几位浮点数
height Number/String 12 滑动条高度,可自定义单位,默认单位 rpx
disabled Boolean false 是否禁用
tips Boolean true 是否显示滑动提示
scale Boolean/Object true 刻度条配置,为 boolean 时表示是否显示,为 object 时见下方刻度条配置说明
backgroundStyle Object {} 背景条自定义样式
activeStyle Object {} 选中条自定义样式

刻度条配置说明

属性名 类型 默认值 说明
show Boolean true 是否显示
min Boolean true 是否显示最小刻度
max Boolean true 是否显示最大刻度
interval Number auto 刻度间隔,即间隔几个步长,不设步长时默认为 1,默认自动计算间隔,显示 10 个左右的刻度
color String #333333 刻度值颜色
tickColor String #999999 刻度线颜色
fontSize Number/String 22 刻度值字体大小
format Function null 格式化函数,可以通过此函数来设置具体某一个刻度的显示内容和样式

回调方法

方法名 说明 返回值
change 滑动时触发 firstValue: 第一个滑点的值,一般只在小程序使用firstTips插槽时才有用, secondValue,第一个滑点的值,一般只在小程序使用secondValue插槽时才有用,values: 选择区间,数组形式,第一个值为较小值,第二个值为较大值
start 按住滑动块时触发 block: 按住的滑动块, value: 按住滑动块的当前值, values: 同上
end 松开滑动块时触发 block: 按住的滑动块, value: 按住滑动块的当前值, values: 同上

使用示例

<slider-range
    :scale="{
        show: true,
        format: scaleFormat
    }"
    @change="changeSliderValue">
</slider-range>
import SliderRange from '@/components/tianzai-slider-range'
export default {
    components:{
        SliderRange
    },
    methods: {
        changeSliderValue(e){
            console.log(e)
        },
        scaleFormat(val, index){
            if(index % 2 != 0){
                return {...val, label: '自定义设置', fontSize: '48rpx'}
            }
            return val
        }
    }
}

插槽(微信不支持同名插槽多次渲染,需要不同的写法兼容)

// 自定义滑动块
<slider-range>
    <!-- #ifndef MP-WEIXIN -->
    <template #block>
        <image
            class="block-image"
            src="https://qiniu-web-assets.dcloud.net.cn/unidoc/zh/icon.png?v=1556263038788">
        </image>
    </template>
    <!-- #endif -->
    <!-- #ifdef MP-WEIXIN -->
    <template #firstBlock>
        <image
            class="block-image"
            src="https://qiniu-web-assets.dcloud.net.cn/unidoc/zh/icon.png?v=1556263038788">
        </image>
    </template>
    <template #secondBlock>
        <image
            class="block-image"
            src="https://qiniu-web-assets.dcloud.net.cn/unidoc/zh/icon.png?v=1556263038788">
        </image>
    </template>
    <!-- 这个是用来撑起元素高度的,不传这个滑动条不会自动撑起高度 -->
    <template #placeholderBlock>
        <image
            class="block-image"
            src="https://qiniu-web-assets.dcloud.net.cn/unidoc/zh/icon.png?v=1556263038788">
        </image>
    </template>
    <!-- #endif -->
</slider-range>
// 自定义滑动提示
<slider-range>
    <!-- #ifndef MP-WEIXIN -->
    <template #tips="{ value }">
        <view class="dark-mode">{{ value }}</view>
    </template>
    <!-- #endif -->
    <!-- #ifdef MP-WEIXIN -->
    <!-- 微信小程序不能使用插槽传值,可以在 change 方法里获取到后显示出来对应的值 -->
    <template v-slot:firstTips>
        <view class="dark-mode">{{ firstValue }}</view>
    </template>
    <template v-slot:secondTips>
        <view class="dark-mode">{{ secondValue }}</view>
    </template>
    <!-- #endif -->
</slider-range>

其他注意点

  • 组件所有属性并非绑定且没有watch监听,只用于组件渲染时的初始设置,可以在 value、min、max、step 等属性发生变化时调用组件的 create 方法来使其生效,否则可能造成组件显示错乱。
    <slider-range :max="max || 100" ref="mySliderRange"></slider-range>
    this.max = 10
    this.$nextTick(() => {
    this.$refs.mySliderRange.create()
    })
  • format 在函数中改变 fontSize 时不再自动补全单位(不能只写数字),需设置时填写完全。
  • 关于微信的多个同名插槽问题,官方的 issues 上说在解决中,如果哪天解决了可以在评论区提醒我来优化 github issues
  • 关于微信小程序插槽无法传值问题,HBuilderx 官方说解决了,但是我在编写过程中还是无法使用,如果有人会写,麻烦在评论区告知 github issues

隐私、权限声明

1. 本插件需要申请的系统权限列表:

2. 本插件采集的数据、发送的服务器地址、以及数据用途说明:

3. 本插件是否包含广告,如包含需详细说明广告表达方式、展示频率:

许可协议

MIT协议

使用中有什么不明白的地方,就向插件作者提问吧~ 我要提问