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

标签 javascript html css rgb rgba

我目前正在为我的 LED 开发网络界面。所以我想要 3 个 slider ,我可以从那里向我的 Controller 发送一个十六进制值。

这是我目前所拥有的:

    <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 获取我可以发送到我的 Controller 的十六进制值:

    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 之间的值相去甚远。 相反,如果我移动 slider ,我会得到类似 #86122240 的值,即使如果我从按钮中输入静态值,函数 color() 确实有效。

最佳答案

您正在尝试将您的 rgb 值作为字符串推送到您的 rgbToHex() 函数。只需先在您的 color() 函数中使用 parseInt() 将它们转换为整数即可函数,然后将转换后的 rgb 值发送到您的 rgbToHex() 函数。

此外,所有三个输入监听器都在做同样的事情,因此只需创建一个名为 say、assignRGB() 的单独函数,并在调用这三个 slider 的输入事件中的任何一个时调用该函数.

您还可以使用 querySelectorAll() 进一步清理代码方法来检索所有三个输入并将输入监听器添加到每个输入。


检查并运行以下代码片段以获取上述方法的实际示例:

const rgbSliders = document.querySelectorAll('.slider');

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

rgbSliders.forEach(function(slider){
  slider.addEventListener('input', assignRGB);
});

function color(r, g, b) {
  const x = parseInt(r);
  const y = parseInt(g);
  const z = parseInt(b);

  console.log(rgbToHex(x,y,z));
}

function rgbToHex(r, g, b) {
    return "#" + ((1 << 24) + (r << 16) + (g << 8) + b).toString(16).slice(1);
}
<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>

关于javascript - 如何从 HTML 页面中的 3 个输入范围正确获取 RGB 值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59864351/

相关文章:

html - 覆盖子元素上的文本装饰

javascript - 如何使用inspect元素找到此测验的答案?

javascript - backstretch 导致 chrome 中的其他背景图像出现问题

html - 使用 CSS 在 ASP.NET 单选按钮中动态更改颜色

javascript - 将一个数组的顺序与另一个数组匹配

javascript - 添加 ng-click 像属性 AngularJS

javascript - 循环赋值然后中断

javascript - 禁用文本区域中的一些特殊字符

php - $_POST 变量在 Chrome 中检测到,但在 Firefox 中未检测到

css - 如何防止 vh-units 忽略滚动条?