花潮论坛

搜索
热搜: 活动 交友 discuz
查看: 162|回复: 80

一句代码生成rgba随机颜色

[复制链接]
  • TA的每日心情
    慵懒
    2025-12-15 08:01
  • 签到天数: 1670 天

    [LV.Master]伴坛终老

    3050

    主题

    13万

    回帖

    28万

    积分

    管理员

    Rank: 9Rank: 9Rank: 9Rank: 9Rank: 9Rank: 9Rank: 9Rank: 9Rank: 9

    花潮帅哥鼠牛虎兔龙蛇马羊猴鸡狗猪多彩人生星月交辉奔放热烈海样胸怀春风拂面火热情怀优雅迷人神秘浪漫相遇之美鹰傲苍穹花好月圆紫色情节飞龙在天王者至尊大将风范音画大师天籁妙音共看流星风雨同行我心永远幸福快乐喜乐安康侠骨柔肠心想事成开朗大方花潮管理

    发表于 2024-5-16 12:07 | 显示全部楼层 |阅读模式

    请马上登录,朋友们都在花潮里等着你哦:)

    您需要 登录 才可以下载或查看,没有账号?立即注册

    x
    本帖最后由 马黑黑 于 2024-5-16 12:14 编辑

    代码

    var mkRgba = (r,g,b,a) => `rgba(${[r,g,b].map(x => Math.round(Math.random() * (x >= 0 ? x : 255)))},${a ? a : Math.random().toFixed(2)})`;


    函数解释:


    四个参数中,使用 map 内置函数迭代前三个参数 r、g、b,使之生成rgb三原色随机代码,期间判断参数值是否大于等于0,符合条件使用该参数数值否则使用 255,然后对之取随机数;alpha通道值则依据参数是否配置,若配置使用该配置作为不透明度数值、若不配置使用0~1的随机数(去2位小数点)。函数可以不传参,这将得到rgb都随机、a也随机的颜色,传参则应至少传完rgb三个参数。传参可灵活定制颜色范围,比方说想要红色系的随机颜色,可这样处理:mkRgba(255, 0, 0, .9)。

    应用实例

    示例代码

    <style> #mydiv { margin: 20px auto; display: grid; place-items: center; width: 400px; height: 200px; position: relative; } #outMsg { padding: 10px 20px; background: #eee; width: fit-content; border-radius: 20px; } </style>   <div id="mydiv"><p id="outMsg"></p></div>   <script> var mkRgba = (r,g,b,a) => `rgba(${[r,g,b].map(x => Math.round(Math.random() * (x >= 0 ? x : 255)))},${a ? a : Math.random().toFixed(2)})`; mydiv.onclick = () => outMsg.innerText = mydiv.style.background = mkRgba(); mydiv.click(); </script>

    评分

    参与人数 2威望 +80 金钱 +160 经验 +80 收起 理由
    红影 + 50 + 100 + 50 赞一个!
    南无月 + 30 + 60 + 30 很给力!

    查看全部评分

  • TA的每日心情
    慵懒
    2025-12-15 08:01
  • 签到天数: 1670 天

    [LV.Master]伴坛终老

    3050

    主题

    13万

    回帖

    28万

    积分

    管理员

    Rank: 9Rank: 9Rank: 9Rank: 9Rank: 9Rank: 9Rank: 9Rank: 9Rank: 9

    花潮帅哥鼠牛虎兔龙蛇马羊猴鸡狗猪多彩人生星月交辉奔放热烈海样胸怀春风拂面火热情怀优雅迷人神秘浪漫相遇之美鹰傲苍穹花好月圆紫色情节飞龙在天王者至尊大将风范音画大师天籁妙音共看流星风雨同行我心永远幸福快乐喜乐安康侠骨柔肠心想事成开朗大方花潮管理

     楼主| 发表于 2024-5-16 18:28 | 显示全部楼层
    本帖最后由 马黑黑 于 2024-5-16 18:36 编辑
    红影 发表于 2024-5-16 14:09
    一句代码就能生成rgba随机颜色,这个太厉害了。
    虽然“map 内置函数迭代前三个参数 r、g、b”不 ...

    map,作为JS内置函数,它的作用就是对数组元素进行迭代,在遍历数组元素时通过引用函数对数组元素进行处理,最后将处理返回一个新的数组。看下面的示例:

    let ar1 = [1,3,5,7]; //声明数组 ar1 并赋值
    //下面声明数组 ar2,ar2 通过 map 迭代 ar1 并计算出数组元素与自身的乘积然后赋值给 ar2
    let ar2 = ar1.map( x => x * x);

    console.log(ar1); //[1, 3, 5, 7] - ar1 不被改变
    console.log(ar2); //[1, 9, 25, 49] - ar2 是 ar1 迭代出来的新数组

    上例,map 迭代数组 ar1 的时候,它引用的函数因为简单直接写在 map 迭代语句里,x => x * x,x 代表数组元素自身,=> 表示箭头函数,x * x 是函数运算的内容。写成普通函数可以是酱紫:

    function count(n) {
        return n * n;
    }

    或用箭头函数:

    let count = (n) => n * n;

    然后 ar2 的赋值语句写成:

    let ar2 = ar1.map(x => count(x));

    使用独立函数后的完整代码:

    let count = (n) => n * n;

    let ar1 = [1,2,3];
    let ar2 = ar1.map(x => count(x));

    console.log(ar1);
    console.log(ar2);

    评分

    参与人数 1威望 +50 金钱 +100 经验 +50 收起 理由
    红影 + 50 + 100 + 50 赞一个!

    查看全部评分

    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    开心
    2024-3-4 09:02
  • 签到天数: 33 天

    [LV.5]常住居民I

    94

    主题

    9699

    回帖

    2万

    积分

    论坛元老

    Rank: 80Rank: 80Rank: 80Rank: 80Rank: 80Rank: 80Rank: 80Rank: 80

    花潮美女鼠牛虎兔龙蛇马羊猴鸡狗猪蝴蝶情怀音画大师天籁妙音风雨同行我心永远绚丽缤纷

    发表于 2024-5-16 12:46 | 显示全部楼层
    这个加了透明度,颜色比之前更浅一点
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    开心
    2024-3-4 09:02
  • 签到天数: 33 天

    [LV.5]常住居民I

    94

    主题

    9699

    回帖

    2万

    积分

    论坛元老

    Rank: 80Rank: 80Rank: 80Rank: 80Rank: 80Rank: 80Rank: 80Rank: 80

    花潮美女鼠牛虎兔龙蛇马羊猴鸡狗猪蝴蝶情怀音画大师天籁妙音风雨同行我心永远绚丽缤纷

    发表于 2024-5-16 12:46 | 显示全部楼层
    传参可灵活定制颜色范围,比方说想要红色系的随机颜色,可这样处理:mkRgba(255, 0, 0, .9)。
    试了这句,还没试成
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    慵懒
    2025-12-15 08:01
  • 签到天数: 1670 天

    [LV.Master]伴坛终老

    3050

    主题

    13万

    回帖

    28万

    积分

    管理员

    Rank: 9Rank: 9Rank: 9Rank: 9Rank: 9Rank: 9Rank: 9Rank: 9Rank: 9

    花潮帅哥鼠牛虎兔龙蛇马羊猴鸡狗猪多彩人生星月交辉奔放热烈海样胸怀春风拂面火热情怀优雅迷人神秘浪漫相遇之美鹰傲苍穹花好月圆紫色情节飞龙在天王者至尊大将风范音画大师天籁妙音共看流星风雨同行我心永远幸福快乐喜乐安康侠骨柔肠心想事成开朗大方花潮管理

     楼主| 发表于 2024-5-16 13:11 | 显示全部楼层
    南无月 发表于 2024-5-16 12:46
    传参可灵活定制颜色范围,比方说想要红色系的随机颜色,可这样处理:mkRgba(255, 0, 0, .9)。
    试了这句, ...

    你就拿 255, 0, 0, .9 作为传参放到实例代码的 mkRgba() 括号里
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    开心
    2025-12-1 20:32
  • 签到天数: 1052 天

    [LV.10]以坛为家III

    1881

    主题

    32万

    回帖

    37万

    积分

    管理员

    Rank: 9Rank: 9Rank: 9Rank: 9Rank: 9Rank: 9Rank: 9Rank: 9Rank: 9

    花潮美女虎龙狗猪多彩人生星月交辉海样胸怀火热情怀优雅迷人神秘浪漫缤纷心情草莓情怀蝴蝶情怀心曲飞扬星星情怀七彩绚丽活泼开朗女儿情怀相遇之美一往情深花好月圆心香一瓣紫色情节飞龙在天金剪刀天籁妙音妙笔生花风雨同行我心永远天长地久幸福快乐绚丽缤纷喜乐安康中秋征文周年庆指尖上的流年舞会之星分析(喊冤)章总结章杀人王小强章最佳杀刺临屏写诗七夕诗钟活动第五届风云第六届风云情人节花潮管理

    发表于 2024-5-16 14:07 | 显示全部楼层
    马黑黑 发表于 2024-5-16 13:11
    你就拿 255, 0, 0, .9 作为传参放到实例代码的 mkRgba() 括号里

    嗯嗯,把mydiv.style.background = mkRgba();括号里换成红色,就只在红色范围里流转了。绿色也一样,把255和后面的0换个位置。只是这样的透明度是固定的了,不再是随机的。
     
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    开心
    2025-12-1 20:32
  • 签到天数: 1052 天

    [LV.10]以坛为家III

    1881

    主题

    32万

    回帖

    37万

    积分

    管理员

    Rank: 9Rank: 9Rank: 9Rank: 9Rank: 9Rank: 9Rank: 9Rank: 9Rank: 9

    花潮美女虎龙狗猪多彩人生星月交辉海样胸怀火热情怀优雅迷人神秘浪漫缤纷心情草莓情怀蝴蝶情怀心曲飞扬星星情怀七彩绚丽活泼开朗女儿情怀相遇之美一往情深花好月圆心香一瓣紫色情节飞龙在天金剪刀天籁妙音妙笔生花风雨同行我心永远天长地久幸福快乐绚丽缤纷喜乐安康中秋征文周年庆指尖上的流年舞会之星分析(喊冤)章总结章杀人王小强章最佳杀刺临屏写诗七夕诗钟活动第五届风云第六届风云情人节花潮管理

    发表于 2024-5-16 14:09 | 显示全部楼层
    一句代码就能生成rgba随机颜色,这个太厉害了。
    虽然“map 内置函数迭代前三个参数 r、g、b”不太好懂,但至少能实现一句就能变色了。
     
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    开心
    2025-12-1 20:32
  • 签到天数: 1052 天

    [LV.10]以坛为家III

    1881

    主题

    32万

    回帖

    37万

    积分

    管理员

    Rank: 9Rank: 9Rank: 9Rank: 9Rank: 9Rank: 9Rank: 9Rank: 9Rank: 9

    花潮美女虎龙狗猪多彩人生星月交辉海样胸怀火热情怀优雅迷人神秘浪漫缤纷心情草莓情怀蝴蝶情怀心曲飞扬星星情怀七彩绚丽活泼开朗女儿情怀相遇之美一往情深花好月圆心香一瓣紫色情节飞龙在天金剪刀天籁妙音妙笔生花风雨同行我心永远天长地久幸福快乐绚丽缤纷喜乐安康中秋征文周年庆指尖上的流年舞会之星分析(喊冤)章总结章杀人王小强章最佳杀刺临屏写诗七夕诗钟活动第五届风云第六届风云情人节花潮管理

    发表于 2024-5-16 14:13 | 显示全部楼层
    传参还可以配置两个,255, 0, 255, .9,然后去感受设定情况下的颜色变化,真有趣
     
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    慵懒
    2025-12-15 08:01
  • 签到天数: 1670 天

    [LV.Master]伴坛终老

    3050

    主题

    13万

    回帖

    28万

    积分

    管理员

    Rank: 9Rank: 9Rank: 9Rank: 9Rank: 9Rank: 9Rank: 9Rank: 9Rank: 9

    花潮帅哥鼠牛虎兔龙蛇马羊猴鸡狗猪多彩人生星月交辉奔放热烈海样胸怀春风拂面火热情怀优雅迷人神秘浪漫相遇之美鹰傲苍穹花好月圆紫色情节飞龙在天王者至尊大将风范音画大师天籁妙音共看流星风雨同行我心永远幸福快乐喜乐安康侠骨柔肠心想事成开朗大方花潮管理

     楼主| 发表于 2024-5-16 18:15 | 显示全部楼层
    红影 发表于 2024-5-16 14:13
    传参还可以配置两个,255, 0, 255, .9,然后去感受设定情况下的颜色变化,真有趣

    是这么设计的
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    开心
    2024-3-4 09:02
  • 签到天数: 33 天

    [LV.5]常住居民I

    94

    主题

    9699

    回帖

    2万

    积分

    论坛元老

    Rank: 80Rank: 80Rank: 80Rank: 80Rank: 80Rank: 80Rank: 80Rank: 80

    花潮美女鼠牛虎兔龙蛇马羊猴鸡狗猪蝴蝶情怀音画大师天籁妙音风雨同行我心永远绚丽缤纷

    发表于 2024-5-16 20:12 | 显示全部楼层
    马黑黑 发表于 2024-5-16 13:11
    你就拿 255, 0, 0, .9 作为传参放到实例代码的 mkRgba() 括号里

    实例代码。。
    我的错
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    慵懒
    2025-12-15 08:01
  • 签到天数: 1670 天

    [LV.Master]伴坛终老

    3050

    主题

    13万

    回帖

    28万

    积分

    管理员

    Rank: 9Rank: 9Rank: 9Rank: 9Rank: 9Rank: 9Rank: 9Rank: 9Rank: 9

    花潮帅哥鼠牛虎兔龙蛇马羊猴鸡狗猪多彩人生星月交辉奔放热烈海样胸怀春风拂面火热情怀优雅迷人神秘浪漫相遇之美鹰傲苍穹花好月圆紫色情节飞龙在天王者至尊大将风范音画大师天籁妙音共看流星风雨同行我心永远幸福快乐喜乐安康侠骨柔肠心想事成开朗大方花潮管理

     楼主| 发表于 2024-5-16 21:00 | 显示全部楼层
    南无月 发表于 2024-5-16 20:12
    实例代码。。
    我的错

    函数的调用,如果有返回值,你只要要声明一个变量去获取它。参考下面的例子:

    let add = (a, b, c) => a + b + c; // 把三个数相加的函数

    let res = add(20, 13, 6); //调用 add 函数 并赋值给 res 变量
    console.log(res); //把 res 即运算结果打印到控制台
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    开心
    2024-3-4 09:02
  • 签到天数: 33 天

    [LV.5]常住居民I

    94

    主题

    9699

    回帖

    2万

    积分

    论坛元老

    Rank: 80Rank: 80Rank: 80Rank: 80Rank: 80Rank: 80Rank: 80Rank: 80

    花潮美女鼠牛虎兔龙蛇马羊猴鸡狗猪蝴蝶情怀音画大师天籁妙音风雨同行我心永远绚丽缤纷

    发表于 2024-5-16 21:05 | 显示全部楼层
    马黑黑 发表于 2024-5-16 21:00
    函数的调用,如果有返回值,你只要要声明一个变量去获取它。参考下面的例子:

    let add = (a, b, c) => ...

    好哒,我就说老师的代码怎么可能试不出来。原来还是我的错
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    慵懒
    2025-12-15 08:01
  • 签到天数: 1670 天

    [LV.Master]伴坛终老

    3050

    主题

    13万

    回帖

    28万

    积分

    管理员

    Rank: 9Rank: 9Rank: 9Rank: 9Rank: 9Rank: 9Rank: 9Rank: 9Rank: 9

    花潮帅哥鼠牛虎兔龙蛇马羊猴鸡狗猪多彩人生星月交辉奔放热烈海样胸怀春风拂面火热情怀优雅迷人神秘浪漫相遇之美鹰傲苍穹花好月圆紫色情节飞龙在天王者至尊大将风范音画大师天籁妙音共看流星风雨同行我心永远幸福快乐喜乐安康侠骨柔肠心想事成开朗大方花潮管理

     楼主| 发表于 2024-5-16 21:06 | 显示全部楼层
    南无月 发表于 2024-5-16 21:05
    好哒,我就说老师的代码怎么可能试不出来。原来还是我的错

    对JS还不太熟
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    开心
    2024-3-4 09:02
  • 签到天数: 33 天

    [LV.5]常住居民I

    94

    主题

    9699

    回帖

    2万

    积分

    论坛元老

    Rank: 80Rank: 80Rank: 80Rank: 80Rank: 80Rank: 80Rank: 80Rank: 80

    花潮美女鼠牛虎兔龙蛇马羊猴鸡狗猪蝴蝶情怀音画大师天籁妙音风雨同行我心永远绚丽缤纷

    发表于 2024-5-16 21:07 | 显示全部楼层
    马黑黑 发表于 2024-5-16 21:00
    函数的调用,如果有返回值,你只要要声明一个变量去获取它。参考下面的例子:

    let add = (a, b, c) => ...

    先规定好了ADD,它就会很靠谱的执行这就是一个小型编程呗
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    慵懒
    2025-12-15 08:01
  • 签到天数: 1670 天

    [LV.Master]伴坛终老

    3050

    主题

    13万

    回帖

    28万

    积分

    管理员

    Rank: 9Rank: 9Rank: 9Rank: 9Rank: 9Rank: 9Rank: 9Rank: 9Rank: 9

    花潮帅哥鼠牛虎兔龙蛇马羊猴鸡狗猪多彩人生星月交辉奔放热烈海样胸怀春风拂面火热情怀优雅迷人神秘浪漫相遇之美鹰傲苍穹花好月圆紫色情节飞龙在天王者至尊大将风范音画大师天籁妙音共看流星风雨同行我心永远幸福快乐喜乐安康侠骨柔肠心想事成开朗大方花潮管理

     楼主| 发表于 2024-5-16 21:07 | 显示全部楼层
    南无月 发表于 2024-5-16 21:07
    先规定好了ADD,它就会很靠谱的执行这就是一个小型编程呗

    就是几个数相加,多少个就要多少个参数
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    开心
    2024-3-4 09:02
  • 签到天数: 33 天

    [LV.5]常住居民I

    94

    主题

    9699

    回帖

    2万

    积分

    论坛元老

    Rank: 80Rank: 80Rank: 80Rank: 80Rank: 80Rank: 80Rank: 80Rank: 80

    花潮美女鼠牛虎兔龙蛇马羊猴鸡狗猪蝴蝶情怀音画大师天籁妙音风雨同行我心永远绚丽缤纷

    发表于 2024-5-16 21:09 | 显示全部楼层

    我的政策么,就是不熟不要紧
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    开心
    2024-3-4 09:02
  • 签到天数: 33 天

    [LV.5]常住居民I

    94

    主题

    9699

    回帖

    2万

    积分

    论坛元老

    Rank: 80Rank: 80Rank: 80Rank: 80Rank: 80Rank: 80Rank: 80Rank: 80

    花潮美女鼠牛虎兔龙蛇马羊猴鸡狗猪蝴蝶情怀音画大师天籁妙音风雨同行我心永远绚丽缤纷

    发表于 2024-5-16 21:09 | 显示全部楼层
    马黑黑 发表于 2024-5-16 21:07
    就是几个数相加,多少个就要多少个参数

    这个听明白了
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    开心
    2025-12-1 20:32
  • 签到天数: 1052 天

    [LV.10]以坛为家III

    1881

    主题

    32万

    回帖

    37万

    积分

    管理员

    Rank: 9Rank: 9Rank: 9Rank: 9Rank: 9Rank: 9Rank: 9Rank: 9Rank: 9

    花潮美女虎龙狗猪多彩人生星月交辉海样胸怀火热情怀优雅迷人神秘浪漫缤纷心情草莓情怀蝴蝶情怀心曲飞扬星星情怀七彩绚丽活泼开朗女儿情怀相遇之美一往情深花好月圆心香一瓣紫色情节飞龙在天金剪刀天籁妙音妙笔生花风雨同行我心永远天长地久幸福快乐绚丽缤纷喜乐安康中秋征文周年庆指尖上的流年舞会之星分析(喊冤)章总结章杀人王小强章最佳杀刺临屏写诗七夕诗钟活动第五届风云第六届风云情人节花潮管理

    发表于 2024-5-16 21:26 | 显示全部楼层

    去试了半天,感受颜色的变化。
     
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    开心
    2025-12-1 20:32
  • 签到天数: 1052 天

    [LV.10]以坛为家III

    1881

    主题

    32万

    回帖

    37万

    积分

    管理员

    Rank: 9Rank: 9Rank: 9Rank: 9Rank: 9Rank: 9Rank: 9Rank: 9Rank: 9

    花潮美女虎龙狗猪多彩人生星月交辉海样胸怀火热情怀优雅迷人神秘浪漫缤纷心情草莓情怀蝴蝶情怀心曲飞扬星星情怀七彩绚丽活泼开朗女儿情怀相遇之美一往情深花好月圆心香一瓣紫色情节飞龙在天金剪刀天籁妙音妙笔生花风雨同行我心永远天长地久幸福快乐绚丽缤纷喜乐安康中秋征文周年庆指尖上的流年舞会之星分析(喊冤)章总结章杀人王小强章最佳杀刺临屏写诗七夕诗钟活动第五届风云第六届风云情人节花潮管理

    发表于 2024-5-16 21:38 | 显示全部楼层
    马黑黑 发表于 2024-5-16 18:28
    map,作为JS内置函数,它的作用就是对数组元素进行迭代,在遍历数组元素时通过引用函数对数组元素进行处 ...

    谢谢黑黑的详细解答,现在看明白了。“x 代表数组元素自身”,开始时对x时什么不知道,对map也不清楚呢。
     
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    慵懒
    2025-12-15 08:01
  • 签到天数: 1670 天

    [LV.Master]伴坛终老

    3050

    主题

    13万

    回帖

    28万

    积分

    管理员

    Rank: 9Rank: 9Rank: 9Rank: 9Rank: 9Rank: 9Rank: 9Rank: 9Rank: 9

    花潮帅哥鼠牛虎兔龙蛇马羊猴鸡狗猪多彩人生星月交辉奔放热烈海样胸怀春风拂面火热情怀优雅迷人神秘浪漫相遇之美鹰傲苍穹花好月圆紫色情节飞龙在天王者至尊大将风范音画大师天籁妙音共看流星风雨同行我心永远幸福快乐喜乐安康侠骨柔肠心想事成开朗大方花潮管理

     楼主| 发表于 2024-5-16 21:51 | 显示全部楼层
    红影 发表于 2024-5-16 21:38
    谢谢黑黑的详细解答,现在看明白了。“x 代表数组元素自身”,开始时对x时什么不知道,对map也不清楚呢。 ...

    x 是参数,下面两个表达方法是等价的:

    x => ...

    function(x) {  }
    回复 支持 反对

    使用道具 举报

    您需要登录后才可以回帖 登录 | 立即注册

    本版积分规则

    小黑屋|手机版|Archiver|服务支持:DZ动力|huachaowang.com Inc. ( 蜀ICP备17032287号-1 )

    GMT+8, 2025-12-16 02:03 , Processed in 0.151076 second(s), 32 queries .

    Powered by Discuz! X3.4

    © 2001-2013 Comsenz Inc.

    快速回复 返回顶部 返回列表