JS黄金分割法实现随机漂亮颜色!

最近在做一个游戏需要随机生成颜色,用最原始的方法效果是这样的:

var bgColor  = 'rgb('+Math.random()*255+','+Math.random()*255+','+Math.random()*255+')'

在这里插入图片描述
如果用这样一些颜色在你的游戏里就可以毁了你的游戏,颜色太土了!
然后查询了各种资料后发现可以用黄金分割法来解决这个问题,原理参考这篇文章:如何生成随机的颜色,我就不搬了。实现后效果如下:
在这里插入图片描述
直接上代码吧!完整代码如下:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <script type="text/javascript">
        var color = {
            colorArr:[],
            hsvtorgb:function (h, s, v) {//hsv转rgb
                var h_i = parseInt(h * 6);
                var f = h * 6 - h_i;
                var p = v * (1 - s);
                var q = v * (1 - f * s);
                var t = v * (1 - (1 - f) * s);
                var r, g, b;
                switch (h_i) {
                    case 0:
                        r = v;
                        g = t;
                        b = p;
                        break;
                    case 1:
                        r = q;
                        g = v;
                        b = p;
                        break;
                    case 2:
                        r = p;
                        g = v;
                        b = t;
                        break;
                    case 3 :
                        r = p;
                        g = q;
                        b = v;
                        break;
                    case 4:
                        r = t;
                        g = p;
                        b = v;
                        break;
                    case 5:
                        r = v;
                        g = p;
                        b = q;
                        break;
                    default:
                        r = 1;
                        g = 1;
                        b = 1;
                }
                return 'rgb('+parseInt(r*255)+','+parseInt(g*255)+','+parseInt(b*255)+')'
            },
            setColorArr:function(){//h和s值固定,随机生成v
                this.colorArr = new Array;
                var golden_ratio = 0.618033988749895;
                var s = 0.5;
                var v = 0.999;
                for(var i=0;i<10;i++){
                    var h = golden_ratio + Math.seededRandom(-0.5,0.3);
                    var color = this.hsvtorgb(h,s,v);
                    this.colorArr.push(color)
                }
            }
        }
        Math.seed = -1;
        //var s = Math.seed;
        Math.seededRandom = function(max, min) {//伪随机数(关于伪随机数的运用可以百度下,挺有意思的)
            max = max || 1;
            min = min || 0;
            Math.seed = (Math.seed * 9301 + 49297) % 233280;
            var rnd = Math.seed / 233280.0;
            return min + rnd * (max - min);
        };
        window.onload = function(){
            refreshColor();
        };
        function refreshColor() {//刷新颜色
            var main =  document.getElementById('main');
            removeChildren(main);
            color.setColorArr();
            for(var i=0;i<color.colorArr.length;i++){
                var bgColor  = color.colorArr[i];
                //var bgColor  = 'rgb('+Math.random()*255+','+Math.random()*255+','+Math.random()*255+')'
                var divHTML = '<div class="colorDiv" style="background-color:'+bgColor+'"></div>';
                var div = document.createElement('div');
                div.innerHTML = divHTML;
                main.appendChild(div);
            }
        }
        function changeColor(input) {
            Math.seed = input.value;
            refreshColor();
        }
        function removeChildren(_element){
            var _elementChild = _element.firstChild;
            while(_elementChild){
                _element.removeChild(_elementChild);
                _elementChild = _element.firstChild;
            }
        }
    </script>
    <title>Title</title>
    <style>
       .colorDiv{
           width: 20px;
           height: 50px;
           float: left;
       }
    </style>
</head>
<body>
    <div style=" width: 250px;height: 50px;" id="main">
    </div>
    <input type="number" onclick="changeColor(this)" onkeydown="changeColor(this)"/>
</body>
</html>

直接复制所有内容到html文件中就可以看到效果了,以上代码仅供参考,如有疑问欢迎大家留言讨论!
上一篇:java自定义Gson生成json字符串的顺序

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值