Reto #5 Azul oscuro casi negro

#0000FF oscuro casi #000000 - Paso de RGB a hexadecimal

by didacticode

HTML

<!DOCTYPE html>
<html lang="es">
<head>
    <title>#0000FF oscuro casi #000000 - Paso de RGB a hexadecimal</title>
    <meta charset="utf-8"/>
    <style>
        body{
            background: rgba(85,52,247,1);
            background: -moz-linear-gradient(left, rgba(85,52,247,1) 0%, rgba(0,0,0,1) 100%);
            background: -webkit-gradient(left top, right top, color-stop(0%, rgba(85,52,247,1)), color-stop(100%, rgba(0,0,0,1)));
            background: -webkit-linear-gradient(left, rgba(85,52,247,1) 0%, rgba(0,0,0,1) 100%);
            background: -o-linear-gradient(left, rgba(85,52,247,1) 0%, rgba(0,0,0,1) 100%);
            background: -ms-linear-gradient(left, rgba(85,52,247,1) 0%, rgba(0,0,0,1) 100%);
            background: linear-gradient(to right, rgba(85,52,247,1) 0%, rgba(0,0,0,1) 100%);
            filter: progid:DXImageTransform.Microsoft.gradient( startColorstr='#5534f7', endColorstr='#000000', GradientType=1 );
        }
        h1 {
            color:white;
        }
    </style>
    <script src="Reto05_AzulOscuroCasiNegro.js"></script>
</head>
<body>
</body>

JavaScript

// ALGORITO BÁSICO SIN FUNCIONES DE JAVASCRIPT
function rgb (r, g, b){
  return rgbHexadecimalClasica(r)+rgbHexadecimalClasica(g)+rgbHexadecimalClasica(b);
}
//Función clásica de transformación de hexadecimal a decimal
function rgbHexadecimalClasica(decimal){
  const caracteresHexadecimales = ["0","1","2","3","4","5","6","7","8","9","A","B","C","D","E","F"];
  let hexadecimal = "";
  if (decimal<0) hexadecimal = "00";
  else if (decimal>255) hexadecimal = "FF";
  else {
    let resto = 0;
    //Solo entramos aquí si el decimal es mayor a 16 porque hay que hacer la división
    while (decimal>=16){
      // Con el resto sacamos la última letra del código (será un resto del 0 al 15)
      resto = decimal % 16;
      // La primera vez hexadecimal está vacío
      hexadecimal = caracteresHexadecimales[resto] + hexadecimal; //Agregamos a la izquierda
      // El decimal será ahora la división entera de lo que teníamos entre 16
      decimal = parseInt(decimal / 16);
    } // Si salimos del bucle es que tenemos un número inferior a 16: lo pasamos a hexadecimal
    hexadecimal = caracteresHexadecimales[decimal] + hexadecimal;
    if (hexadecimal.length===1) hexadecimal="0"+hexadecimal;
  }
  return hexadecimal;
}

function rgb2 (r, g, b){
  return rgbHexadecimal(r)+rgbHexadecimal(g)+rgbHexadecimal(b);
}

/*function rgbHexadecimal (decimal){
  let hexadecimal = "";
  if (decimal<0) hexadecimal = "00";
  else if (decimal>255) hexadecimal = "FF";
  else {
    // Para asegurarnos que trabajamos con un número, utilizamos Number(decimal)
    //Podemos utilizar un if para saber si tenemos solo 1 caracter
    //o bien meter siempre un "0" y reducir la cadena a dos caracteres con slice
    hexadecimal = ("0"+Number(decimal).toString(16)).slice(-2).toUpperCase();
  }
  return hexadecimal;
}*/

function rgbHexadecimal (decimal){
  // Comprobamos el número menor entre el decimal y el 255, y el mayor entre ese y el 0
  // Así evitamos también que introduzcan valores erróneos (menor...