如何从HTML页面的3个输入范围正确获取RGB值

问题描述 投票:0回答:1

我目前正在为领导者使用Web界面。所以我想有3个滑杆,我可以通过它向我的控制器发送一个十六进制值。这就是我到目前为止所得到的:

    <div class="main">
        <div class="slideContainer">
            <input type="range" class="slider" value="0" min="0" max="255" step="1" id="sliderRed" style="background: linear-gradient(to right, black 0%, red 70%);">
        </div>
        <div class="slideContainer">
            <input type="range" class="slider" value="0" min="0" max="255" step="1" id="sliderGreen" style="background: linear-gradient(to right, black, green 70%);">
        </div>
        <div class="slideContainer">
            <input type="range" class="slider" value="0" min="0" max="255" step="1" id="sliderBlue" style="background: linear-gradient(to right, black, blue 70%);">
        </div>
    </div>

和JS以获取可以发送到控制器的十六进制值:

    sliderRed.oninput = function () {
        var red = sliderRed.value;
        var green = sliderGreen.value;
        var blue = sliderBlue.value;
        color(red, green, blue);
    }
    sliderGreen.oninput = function () {
        var red = sliderRed.value;
        var green = sliderGreen.value;
        var blue = sliderBlue.value;

        color(red, green, blue);
    }
    sliderBlue.oninput = function () {
        var red = sliderRed.value;
        var green = sliderGreen.value;
        var blue = sliderBlue.value;

        color(red, green, blue);
    }

    function color(r, g, b) {
        console.log(rgbToHex(r, g, b));
    }

    function rgbToHex(r, g, b) {
        return "#" + ((1 << 24) + (r << 16) + (g << 8) + b).toString(16).slice(1);
    }

但是当我得到的结果与我想要得到的#000000#ffffff的值不相近时。相反,如果我移动红色滑块,则会得到#86122240之类的值。如果我从按钮中输入静态值,则功能color()会起作用。

javascript html
1个回答
0
投票

您的问题出在rgbToHex函数中。试试this working example

© www.soinside.com 2019 - 2024. All rights reserved.