input range实现可滑动的滚动条

项目要求在移动端实现可滑动的进度条,用纯div+css实现,感觉流畅性不够好,最后决定用type=range进行改造

1、页面布局

    

<p class="progress">
    <input type="range" id="accidentRange" min="0" max="200" step="5" value="0">
    <span class="fill"></span>
    <label class="current">0</label>
</p>

  css代码如下:

 .progress{position: relative;}
 
input[type=range] {
  -webkit-appearance: none;
  width: 311px;
  height:8px;
  border-radius: 100px; /*将轨道设为圆角的*/
  background: #E3E6EB;
  border-radius: 100px; /*这个属性设置使填充进度条时的图形为圆角*/
  z-index: 5;
}
 
input[type=range]:focus {
  outline: none;
}
input[type=range]::-webkit-slider-thumb {
  -webkit-appearance: none;
  height: 20px;
  width: 40px;
  background-image: url("../img/recommend/slider.svg");
  background-size: cover;
  box-shadow: 0 6px 6px rgba(255,137,129,0.35);
  border-radius: 24px;
  border:none;
}
 
.fill{
  position: absolute;
  left:0;
  top:3px;
  width: 0;
  height: 8px;
  background: #FFA099;
  border-radius: 100px 0 0 100px;
}
.current{
  color: #F97D75;
  font-size: 24px;
  font-weight: bold;
  position: absolute;
  left:10px;
  top:-30px;
}
其中type=range是基本的滑动条样式,在此重写了滚动条和滑块thumb的样式,
fill是滑块拉动后左侧的颜色填充区域,current是在滑块上方显示当前拉动的值。

2、js实现

新建一个rangeSlider.js,代码如下:

 

$.fn.RangeSlider = function(cfg){
    this.sliderCfg = {
        min: cfg && !isNaN(parseFloat(cfg.min)) ? Number(cfg.min) : null,
        max: cfg && !isNaN(parseFloat(cfg.max)) ? Number(cfg.max) : null,
        step: cfg && Number(cfg.step) ? cfg.step : 1,
        callback: cfg && cfg.callback ? cfg.callback : null
    };

    var $input = $(this);
    var min = this.sliderCfg.min;
    var max = this.sliderCfg.max;
    var step = this.sliderCfg.step;
    var callback = this.sliderCfg.callback;

    $input.attr('min', min)
      .attr('max', max)
      .attr('step', step);

    $input.bind("input", function(e){
        $input.attr('value', this.value);
        var width = ((311-40)/40)*(this.value/5);  //(拿滑动条的总宽 - 滑块的宽度/总共要移动的步数(总共200,每步是5,所以要移动40步))* 当前是第几步 算出移动的距离
        if(this.value == 0){
            width = 0;
        }
        $input.next().css({'width':width'}); //将fill的宽度置为上面计算好的值
        $input.siblings('.current').css({'left':width+'rem'});  //同上
        $input.siblings('.current').html(this.value);


        if ($.isFunction(callback)) {
            callback(this);
        }
    });
};
  页面js调用如下

   $(function(){

    $('#accidentRange').RangeSlider({min: 0, max: 200, step: 5, callback: ''});

    });

最终实现效果如下:







    



  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值