自定义滑动杆样式

285 阅读2分钟

需求

产品给出的视觉图有个滑杆,样式比较独特,如果用组件库来改的话可能也很麻烦,不如直接用HTML+CSS自己再实现一个。

这个视觉长这个样子:

image.png

这玩意独特就独特在拖动的那个小球改成了一个指向下的小飞机,还有一些颜色的修改,下面记录一下实现方法。

实现

选择HTML元素

这里开始比较简单,用input标签,然后type用range就可以得到一个原生滑杆了,然后给出一些参数,如最大值max,步长step,默认值value,最小值min

然后再用input事件把数据对上,这样滑杆的功能就基本完成了,再开始修改样式。

取消默认样式

取消默认样式比较简单,直接使用appearance:none 就好了

设置滑块的样式

滑块的样式需要使用伪类,也是先取消默认样式,然后根据需要来调整就好了

input[type="range"]::-webkit-slider-thumb{
  -webkit-appearance: none;
  width: 10px;
  height: 10px;
  background-color: #f30f3f;
  border-radius: 50%;
}

设置滑块前后不同颜色的背景

css这里直接使用background把颜色设置好,然后通过行内样式来计算不同颜色占整个背景的颜色

input[type="range"]{
  -webkit-appearance: none;
  background: -webkit-linear-gradient(#0000ff,#0000ff) #f8f8f8 no-repeat;
  border-radius: 5px
}

这里使用vue来做演示

  <input 
    type="range" 
    class="slider"
    max="100"
    min="0"
    step="1"
    :value="stepValue"
    @input="onChange"
    :style="{backgroundSize: stepValue + '% 100%','--step': stepValue}"  // 这里用来计算不同颜色所占的比例
    />

到这里实现的效果是这个样子的

一点小问题

在拖动滑块的时候会发现背景颜色和滑块的中心点没有对齐,这里需要用transform来做一个小校正,业务需求是一个倒着的纸飞机,尖尖那里指向进度条的位置,现在行内样式添加'--step': -10+10/(40/2)*stepNumber+'px',然后到css样式里面在transform: translateY(-20px) translateX(var(--step)) 就完事了

具体修改

在滑块那里把滑块的背景设置为纸飞机的背景图片,然后向上偏移 在滑杆的背景那里修改背景颜色就可以实现效果了。