需要完成五个步骤:

  • 去除系统默认的样式;
  • 给滑动轨道(track)添加样式;
  • 给滑块(thumb)添加样式;
  • 根据滑块所在位置填充进度条;
  • 实现多浏览器兼容。
<!DOCTYPE html>
<html>
    <head>
    <title>demo</title>
    <script type="text/javascript" src="lib/jquery.js"></script>
    <script type="text/javascript">
        $.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);
                $input.css( 'background', 'linear-gradient(to right, #059CFA, white ' + this.value + '%, white)' );
                if ($.isFunction(callback)) {
                    callback(this);
                }
            });
        };
    </script>
    <style type="text/css">
        input[type=range] {
            -webkit-appearance: none;
            width: 300px;
            border-radius: 10px; /*这个属性设置使填充进度条时的图形为圆角*/
            background: -webkit-linear-gradient(#059CFA, #059CFA) no-repeat;
            background-size: 0% 100%;
        }
        input[type=range]::-webkit-slider-thumb {
            -webkit-appearance: none;
        } 
        input[type=range]::-webkit-slider-runnable-track {
            height: 15px;
            border-radius: 10px; /*将轨道设为圆角的*/
            box-shadow: 0 1px 1px #def3f8, inset 0 .125em .125em #0d1112; /*轨道内置阴影效果*/
        }
        input[type=range]:focus {
            outline: none;
        }
        input[type=range]::-webkit-slider-thumb {
            -webkit-appearance: none;
            height: 25px;
            width: 25px;
            margin-top: -5px; /*使滑块超出轨道部分的偏移量相等*/
            background: #ffffff;
            border-radius: 50%; /*外观设置为圆形*/
            border: solid 0.125em rgba(205, 224, 230, 0.5); /*设置边框*/
            box-shadow: 0 .125em .125em #3b4547; /*添加底部阴影*/
        }
        input[type=range]::-moz-range-progress {
            background: linear-gradient(to right, #059CFA, white 100%, white);
            height: 13px;   
            border-radius: 10px;
        }
        input[type=range] {
            -webkit-appearance: none;
            width: 300px;
            border-radius: 10px;
        }
        input[type=range]::-ms-track {
            height: 25px;
            border-radius: 10px;
            box-shadow: 0 1px 1px #def3f8, inset 0 .125em .125em #0d1112;
            border-color: transparent; /*去除原有边框*/
            color: transparent; /*去除轨道内的竖线*/
        }
        input[type=range]::-ms-thumb {
            border: solid 0.125em rgba(205, 224, 230, 0.5);
            height: 25px;
            width: 25px;
            border-radius: 50%;
            background: #ffffff;
            margin-top: -5px;
            box-shadow: 0 .125em .125em #3b4547;
        }
        input[type=range]::-ms-fill-lower {
            /*进度条已填充的部分*/
            height: 22px;
            border-radius: 10px;
            background: linear-gradient(to right, #059CFA, white 100%, white);
        }
        input[type=range]::-ms-fill-upper {
            /*进度条未填充的部分*/
            height: 22px;
            border-radius: 10px;
            background: #ffffff;
        }
        input[type=range]:focus::-ms-fill-lower {
            background: linear-gradient(to right, #059CFA, white 100%, white);
            background: linear-gradient(#059CFA, #059CFA) no-repeat;
        }
        input[type=range]:focus::-ms-fill-upper {
            background: #ffffff;
            background: linear-gradient(#059CFA, #059CFA) no-repeat;
        }
    </style>
    </head>
    <body>
        <div id="test">
            <input type="range" value="0">
        </div>
        <script>
            var change = function($input) {
                /*内容可自行定义*/
                console.log("123");
            }
            $('input').RangeSlider({ min: 0,   max: 100,  step: 0.1,  callback: change});
        </script>
    </body>
</html>

 input[type=”range”]