How to customize the HTML5 input range type looks using CSS?

后端 未结 10 2288
粉色の甜心
粉色の甜心 2020-11-27 15:24

I want to customize the looks of the range input type in HTML5 to look something like a progress bar. I\'ve tried applying some common CSS attributes using CSS class but it

10条回答
  •  孤独总比滥情好
    2020-11-27 15:40

    When I looked at this question I needed something simple. There are already a number of framework answers on how to do this, but sometimes it is more lightweight and flexible just to create your own. Of course, you get a certain amount for free with a framework (and it is often the right choice if it is a good fit), but you then have to worry about framework compatibility, support and digging into the depths of the framework to go outside its boundaries.

    Here is a simple javascript-only slider. Basically it is an img for the slider, an img for the button and a callback with a progress percent. Not an all-singing and dancing slider, but something simple to build on.

    The demo

    The HTML

    The script

    Place in a javascript file:

    (function(bb,undefined){    
    bb.Slider = function(buttonCssId,sliderCssId,initialPercentage,progressUpdate)
    {
        var halfButtonWidth = 5;
        var sliderMoving = false;
        var buttonElement = document.getElementById(buttonCssId);
        var sliderElement = document.getElementById(sliderCssId);                
        var length = sliderElement.clientWidth;                
        var leftPos = 0;
        var rightPos = leftPos + length;
        length = rightPos - leftPos;              
    
        if( initialPercentage )
        {
            var buttonPos = leftPos + initialPercentage / 100 * length;
            buttonElement.style.left = buttonPos - halfButtonWidth + 'px';  
        }        
    
        buttonElement.addEventListener( 'mousedown', function(){ 
            sliderMoving = true;
        } );        
    
        document.addEventListener( 'mousemove', function(event){
            if( sliderMoving == true )
            {                      
                var rect = sliderElement.getBoundingClientRect();                                                                        
                var mouseX = event.clientX - rect.left;
                var prop = mouseX / length;
                if( prop < 0 )
                {
                    prop = 0;
                    mouseX = 0;
                }
                if( prop > 1 )
                {
                    prop = 1;
                    mouseX = length;
                }                
                buttonElement.style.left = leftPos + prop * length - halfButtonWidth + 'px';                
                progressUpdate(prop * 100);         
            }
        });
        document.addEventListener( 'mouseup', function(){
            sliderMoving = false;
        });
    }    
    }(window.bb = window.bb || {}));
    

    Example use

    HTML:

    
    

    Javascript:

    function sliderUpdate(percentage)
    {
        var sliderSubject = document.getElementById('bb_sliderSubject');
        sliderSubject.style.width = percentage + '%';
    }
    window.onload=function()
    {
        var slider = new bb.Slider('bb_sliderButton','bb_slider',50,sliderUpdate);
    }
    

提交回复
热议问题