JS 渐变颜色 过渡色取值

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>颜色区域中间的值获取</title>
    <style>
        .div{
            width: 120px;
            height: 800px;
            border: 1px solid;
            margin-left: 10px;
        }
        .flex{
            display: flex;
        }
        .lin{
            background: -webkit-linear-gradient(top, #076cff 0%, #ffffff 100%);
        }
    </style>
</head>
<body>
<div class="flex">
    <div class="div lin"></div>
    <div class="div con1"></div>
    <div class="div con2"></div>
</div>

<script>
    var parseColor = function (hexStr) {
        return hexStr.length === 4 ? hexStr.substr(1).split('').map(function (s) { return 0x11 * parseInt(s, 16); }) : [hexStr.substr(1, 2), hexStr.substr(3, 2), hexStr.substr(5, 2)].map(function (s) { return parseInt(s, 16); })
    };

    // zero-pad 1 digit to 2
    var pad = function (s) {
        return (s.length === 1) ? '0' + s : s;
    };

    /*
        start 开始颜色
        end 结束颜色
        steps 颜色分解 次数
        gamma 暂时理解为透明一点(伽马)
    */
    var gradientColors = function (start, end, steps, gamma) {
        var i, j, ms, me, output = [], so = [];
        gamma = gamma || 1;
        var normalize = function (channel) {
            return Math.pow(channel / 255, gamma);
        };
        start = parseColor(start).map(normalize);
        end = parseColor(end).map(normalize);
        for (i = 0; i < steps; i++) {
            ms = i / (steps - 1);
            me = 1 - ms;
            for (j = 0; j < 3; j++) {
                so[j] = pad(Math.round(Math.pow(start[j] * me + end[j] * ms, 1 / gamma) * 255).toString(16));
            }
            output.push('#' + so.join(''));
        }
        return output;
    };

    var con1 = document.querySelector(".con1")
    var con2 = document.querySelector(".con2")

    var color1 = gradientColors( '#ffffff','#0037ff', 4)
    console.log(color1);

    // 泥萌的新需求
    var color2 = gradientColors('#00ff00', '#ff0000', 100, 2.2)
    console.log(color2);

    load(con1,color1)
    load(con2,color2)
    function load(ele,colorArr){
        var h = ele.clientHeight/colorArr.length
        colorArr.forEach(e => {
            var div = document.createElement('div')
            div.style.background = e
            div.style.height = h +'px'
            ele.appendChild(div)
        });
    }

</script>
</body>
</html>
  • 2
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 在前端中,可以使用 CSS 中的 `linear-gradient` 函数来实现渐变。 例如,要在蓝和红之间创建一个渐变,可以使用以下代码: ```css .gradient { background-image: linear-gradient(to right, blue, red); } ``` 此代码会在容器的背景上创建一个从左到右的渐变,从蓝开始,到红结束。 可以通过在 `linear-gradient` 函数中添加额外的颜色值来实现多渐变。例如,要在蓝、绿和红之间创建一个渐变,可以使用以下代码: ```css .gradient { background-image: linear-gradient(to right, blue, green, red); } ``` 此代码会在容器的背景上创建一个从左到右的渐变,从蓝开始,到绿和红依次结束。 你还可以使用角度或方向关键字(例如 `to top`、`to bottom right` 等)来指定渐变的方向。 最后,你还可以使用 `rgba` 或 `hsla` 格式的颜色值来创建带有透明度的渐变。 希望这些信息对你有帮助! ### 回答2: 前端计算渐变颜色可以通过使用HSL(相、饱和度、亮度)模型来实现。 HSL模型将颜色表示为三个参数:相、饱和度和亮度。其中,相表示颜色的种类,饱和度表示颜色的纯度,亮度表示颜色的明暗程度。 计算渐变颜色的方法是在相保持不变的情况下,通过改变饱和度和亮度来获得不同的颜色。 例如,我们可以以某个基准为起点,设定一个起始的饱和度和亮度值。然后,通过循环递增或递减这两个值,可以得到一系列渐变。 在前端开发中,可以使用JavaScript来计算渐变颜色。可以编写一个函数,接受基准、起始饱和度和亮度值以及渐变步长为参数,然后通过计算得到一系列的颜色值。 具体的计算过程可以通过HSL模型的公式来实现。首先,将基准转换为HSL值。然后,根据起始饱和度和亮度值,以及渐变步长,计算出一系列的新的饱和度和亮度值。最后,将这些新的HSL值转换回RGB值,从而获得渐变。 在实际应用中,可以将计算好的渐变应用到页面的背景、文本颜色等元素上,从而实现系的渐变效果。 总之,通过使用HSL模型和一些计算算法,前端可以计算出渐变颜色,为网页设计增加更丰富的彩变化。 ### 回答3: 计算前端渐变颜色可以使用CSS中的线性渐变或径向渐变属性。线性渐变是沿着一条直线变化颜色,而径向渐变是从一个圆心向外辐射式变化颜色。 对于线性渐变,可以使用以下代码来计算渐变颜色: ```css .gradient { background: linear-gradient(to right, #FF0000, #00FF00, #0000FF); } ``` 上述代码表示从左到右将红(#FF0000)过渡到绿(#00FF00),再过渡到蓝(#0000FF)。你可以根据需要添加更多颜色,每个颜色之间用逗号分隔。 对于径向渐变,可以使用以下代码来计算渐变颜色: ```css .gradient { background: radial-gradient(circle at center, #FF0000, #00FF00, #0000FF); } ``` 上述代码表示从一个圆心向外辐射式将红(#FF0000)过渡到绿(#00FF00),再过渡到蓝(#0000FF)。同样地,你也可以添加更多颜色,每个颜色之间用逗号分隔。 通过设置不同的渐变方向、起始颜色和终止颜色,你可以计算出各种渐变颜色。这些代码可以应用到元素的背景、边框等属性上,使得你的前端设计更加丰富多彩。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值