Javascript 需要一些关于如何将十六进制颜色值转换为rgb()值的技巧吗

Javascript 需要一些关于如何将十六进制颜色值转换为rgb()值的技巧吗,javascript,Javascript,我刚开始阅读面向对象的JavaScript,正在做一个练习 在第91页,它要求编写一个函数,将十六进制颜色转换为它的RGB等价物(例如“RGB(0,0255)”)。它要求您拉入完整的字符串,包括“#” 在阅读了这两章之后,他花了很多时间来解释数据类型、循环、条件和函数,我不知道如何在不作弊和使用某种字符串函数的情况下解析十六进制值——这是他在这一点上都没有涉及到的 你有没有办法只用他在书中演示的函数和方法来做这个练习?他要求javascript在输入以下代码时返回“rgb(0255,0)”: v

我刚开始阅读面向对象的JavaScript,正在做一个练习

在第91页,它要求编写一个函数,将十六进制颜色转换为它的RGB等价物(例如“RGB(0,0255)”)。它要求您拉入完整的字符串,包括“#”

在阅读了这两章之后,他花了很多时间来解释数据类型、循环、条件和函数,我不知道如何在不作弊和使用某种字符串函数的情况下解析十六进制值——这是他在这一点上都没有涉及到的

你有没有办法只用他在书中演示的函数和方法来做这个练习?他要求javascript在输入以下代码时返回“rgb(0255,0)”:

var a = getRGB("#00FF00");
a;

我假设您需要使用循环将十六进制值分解为r、g和b值的数组,然后将它们重新组合为字符串。如果可能的话,请不要给我完整的解决方案,但任何有用的提示将不胜感激。谢谢你的帮助。

我注意到你说没有任何字符串方法。下面是如何仅使用
Array
方法完成第一部分

  • 用于将字符串转换为数组
  • 使用交换
    substr()
    调用
但是,在现实世界中,可以使用提取字符串的部分。第一个参数是偏移量,第二个参数是要提取的字符数

然后可以使用更改数字的基数。只需将数字(作为字符串)作为第一个参数传入,将基数作为第二个参数传入即可。我选择了
16
的基数,因为它们是十六进制数

然后,您可以将返回值与
rgb(x,x,x)
string部分连接起来,就可以开始了:)

您可以将鼠标悬停在下面查看代码(如果卡住)。顺便问一下,有人知道如何制作块级代码扰流板吗

var getRGB=函数(rgb){ var r=rgb.substr(1,2), g=rgb.substr(3,2), b=rgb.substr(5,2);
返回'rgb('+parseInt(r,16)+','+parseInt(g,16)+','+parseInt(b,16)+'); }

一旦您了解了这一点,下一步可能是允许函数接受浏览器允许的RGB的简短形式,即您的示例
\00FF00
可以作为
\0F0
传递

一些提示

  • 首先用
    rgb.length
    检查字符串长度
  • 根据长度更改
    substr()
    调用
  • 构建传递给
    parseInt()
    的字符串,使
    F
    变成
    FF

    • 我注意到你说没有任何字符串方法。下面是如何仅使用
      Array
      方法完成第一部分

      • 用于将字符串转换为数组
      • 使用交换
        substr()
        调用
      但是,在现实世界中,可以使用提取字符串的部分。第一个参数是偏移量,第二个参数是要提取的字符数

      然后可以使用更改数字的基数。只需将数字(作为字符串)作为第一个参数传入,将基数作为第二个参数传入即可。我选择了
      16
      的基数,因为它们是十六进制数

      然后,您可以将返回值与
      rgb(x,x,x)
      string部分连接起来,就可以开始了:)

      您可以将鼠标悬停在下面查看代码(如果卡住)。顺便问一下,有人知道如何制作块级代码扰流板吗

      var getRGB=函数(rgb){ var r=rgb.substr(1,2), g=rgb.substr(3,2), b=rgb.substr(5,2);
      返回'rgb('+parseInt(r,16)+','+parseInt(g,16)+','+parseInt(b,16)+'); }

      一旦您了解了这一点,下一步可能是允许函数接受浏览器允许的RGB的简短形式,即您的示例
      \00FF00
      可以作为
      \0F0
      传递

      一些提示

      • 首先用
        rgb.length
        检查字符串长度
      • 根据长度更改
        substr()
        调用
      • 构建传递给
        parseInt()
        的字符串,使
        F
        变成
        FF

      获取输入字符串并将#替换为零,然后使用parseInt()将其解析为一个整数并发送16作为数字基数,现在您有了一个长整数,其中前8位是蓝色值,9到16位是绿色值,17到24位是红色值。使用钻头移动和掩蔽将其拉出。把它全部放在一个字符串中,比如“rgb(r,g,b)”,恭喜你,你的任务完成了

      function parseRGB(Hex)
      {
          var Word = parseInt(Hex.replace(/^#/, ""), 16);
          var R = Word >> 16 & 0xff;
          var G = Word >> 8 & 0xff;
          var B = Word & 0xff;
      
          return "rgb(" + R + ", " + G + ", " + B + ")";
      }
      var c = "#00ff00";
      alert(parseRGB(c));
      

      获取输入字符串并将#替换为零,然后使用parseInt()将其解析为一个整数并发送16作为数字基数,现在您有了一个长整数,其中前8位是蓝色值,9到16位是绿色值,17到24位是红色值。使用钻头移动和掩蔽将其拉出。把它全部放在一个字符串中,比如“rgb(r,g,b)”,恭喜你,你的任务完成了

      function parseRGB(Hex)
      {
          var Word = parseInt(Hex.replace(/^#/, ""), 16);
          var R = Word >> 16 & 0xff;
          var G = Word >> 8 & 0xff;
          var B = Word & 0xff;
      
          return "rgb(" + R + ", " + G + ", " + B + ")";
      }
      var c = "#00ff00";
      alert(parseRGB(c));
      

      另一种2位方法,适用于使用输入字符串

      function hextoRgb(hex){
          if(/^#[a-fA-F0-9]{6}$/.test(hex)){
              var c= '0x'+hex.substring(1);
              c= [(c>> 16)&255, (c>> 8)&255, c&255];
              return 'rgb('+c.join(',')+')';
          }
          throw 'bad hex '+hex;
      }
      

      另一种2位方法,适用于使用输入字符串

      function hextoRgb(hex){
          if(/^#[a-fA-F0-9]{6}$/.test(hex)){
              var c= '0x'+hex.substring(1);
              c= [(c>> 16)&255, (c>> 8)&255, c&255];
              return 'rgb('+c.join(',')+')';
          }
          throw 'bad hex '+hex;
      }
      

      我不会因为回答了这个问题而称赞自己,但我想我会分享给作者发电子邮件的结果(我想这些天你可以做到!!!)。他给了我一个建议,以下是我的建议,按照他的要求:

      function getRGB(x){
      var a =[];
      a[0] = parseInt(x[1] + x[2],16);
      a[1] = parseInt(x[3] + x[4],16);
      a[2] = parseInt(x[5] + x[6],16);
      a = "rgb(" + a[0] + "," + a[1] + "," + a[2] + ")";   
      return a;
      
      }

      var a=getRGB(“00FF00”);
      a

      我不会因为回答了这个问题而称赞自己,但我想我会分享给作者发电子邮件的结果(我想这些天你可以这么做!!!)。他给了我一个建议,以下是我的建议,按照他的要求:

      function getRGB(x){
      var a =[];
      a[0] = parseInt(x[1] + x[2],16);
      a[1] = parseInt(x[3] + x[4],16);
      a[2] = parseInt(x[5] + x[6],16);
      a = "rgb(" + a[0] + "," + a[1] + "," + a[2] + ")";   
      return a;
      
      }

      var a=getRGB(“00FF00”); a

      尝试使用地雷阵列

      function getRGB(hex){
           var s = [],i ;
           for (i = 1; i < 7; i+=2) {
               s[i] = parseInt(hex[i]+(hex[i+1]),16);
           }
           return `rgb(${s[1]},${s[3]},${s[5]})`;
      }
      
      函数getRGB(十六进制){ var s=[],i; 对于(i=1;i<7;i+=2){