How to increment / decrement hex color values with javascript / jQuery

前端 未结 3 1261
说谎
说谎 2021-02-06 07:33

Is it possible to increment or decrement hex color values on a step-by-step basis in jQuery / javascript?

What I would like to do is something like this:

Adapt

相关标签:
3条回答
  • 2021-02-06 08:07

    I wrote a gradient-function some time ago, maybe it helps you (returns an Array):

    function gradient(startColor, endColor, steps) {
                 var start = {
                         'Hex'   : startColor,
                         'R'     : parseInt(startColor.slice(1,3), 16),
                         'G'     : parseInt(startColor.slice(3,5), 16),
                         'B'     : parseInt(startColor.slice(5,7), 16)
                 }
                 var end = {
                         'Hex'   : endColor,
                         'R'     : parseInt(endColor.slice(1,3), 16),
                         'G'     : parseInt(endColor.slice(3,5), 16),
                         'B'     : parseInt(endColor.slice(5,7), 16)
                 }
                 diffR = end['R'] - start['R'];
                 diffG = end['G'] - start['G'];
                 diffB = end['B'] - start['B'];
    
                 stepsHex  = new Array();
                 stepsR    = new Array();
                 stepsG    = new Array();
                 stepsB    = new Array();
    
                 for(var i = 0; i <= steps; i++) {
                         stepsR[i] = start['R'] + ((diffR / steps) * i);
                         stepsG[i] = start['G'] + ((diffG / steps) * i);
                         stepsB[i] = start['B'] + ((diffB / steps) * i);
                         stepsHex[i] = '#' + Math.round(stepsR[i]).toString(16) + '' + Math.round(stepsG[i]).toString(16) + '' + Math.round(stepsB[i]).toString(16);
                 }
                 return stepsHex;
    
             }
    
    0 讨论(0)
  • 2021-02-06 08:10

    Well you can do it simply by this way:

    var incrementColor = function(color, step){
        var colorToInt = parseInt(color.substr(1), 16),                     // Convert HEX color to integer
            nstep = parseInt(step);                                         // Convert step to integer
        if(!isNaN(colorToInt) && !isNaN(nstep)){                            // Make sure that color has been converted to integer
            colorToInt += nstep;                                            // Increment integer with step
            var ncolor = colorToInt.toString(16);                           // Convert back integer to HEX
            ncolor = '#' + (new Array(7-ncolor.length).join(0)) + ncolor;   // Left pad "0" to make HEX look like a color
            if(/^#[0-9a-f]{6}$/i.test(ncolor)){                             // Make sure that HEX is a valid color
                return ncolor;
            }
        }
        return color;
    };
    

    For steps:

    • 1 by 1 to 256 increment last color
    • 256 by 256 increment middle color
    • 65536 by 65536 increment first color

    A running example here: http://jsfiddle.net/a3JbB/

    0 讨论(0)
  • 2021-02-06 08:16

    Use setInterval to remove exception(stack overflow). jsfiddle

     var start = 0x000000,
        end = 0xFFFFFF, temp;
        var intervalId = setInterval(function(){
           if(start== end){clearInterval(intervalId )};
           temp = (start).toString(16);                  
                 if(temp.length < 8){
    
                     temp = "0000000".substring(0, 8-temp.length)+temp; 
                 } 
                           start++;
                console.log(temp ); 
         }, 10);   
    
    0 讨论(0)
提交回复
热议问题