如何使用reactJs根据背景颜色更改字体颜色

2024-04-13

我的容器有动态背景,它将由用户更改,因此我需要根据背景颜色设置文本颜色,例如,我设置容器的黑色背景,然后我需要为文本设置白色, 我正在为我的应用程序使用 ReactJs 和材料 UI 库,请建议一些好的路径。


请参阅下面的示例代码。

import React, { useState, useEffect } from "react";
import ReactDOM from "react-dom";
import DynamicContainer from "./style";

import "./styles.css";

function App() {
  const [bgColor, setBGColor] = useState("#422DAD");
  const [textColor, setTextColor] = useState("rgb(99,99,100)");

  function hexToRgb(hex) {
    // Expand shorthand form (e.g. "03F") to full form (e.g. "0033FF")
    var shorthandRegex = /^#?([a-f\d])([a-f\d])([a-f\d])$/i;
    hex = hex.replace(shorthandRegex, function(m, r, g, b) {
      return r + r + g + g + b + b;
    });

    var result = /^#?([a-f\d]{2})([a-f\d]{2})([a-f\d]{2})$/i.exec(hex);
    return result
      ? {
          r: parseInt(result[1], 16),
          g: parseInt(result[2], 16),
          b: parseInt(result[3], 16)
        }
      : null;
  }

  useEffect(() => {
    let { r, g, b } = hexToRgb(bgColor);
    let targetColor = `rgb(${r},${g},${b})`;
    var colors = targetColor.match(/^rgb\((\d+),\s*(\d+),\s*(\d+)\)$/);
    var brightness = 1;

    var R = colors[1];
    var G = colors[2];
    var B = colors[3];

    var ir = Math.floor((255 - R) * brightness);
    var ig = Math.floor((255 - G) * brightness);
    var ib = Math.floor((255 - B) * brightness);
    setTextColor(`rgb(${ir}, ${ig}, ${ib})`);
  }, [bgColor]);

  const handleBgChange = e => {
    setBGColor(e.target.value);
  };

  return (
    <>
      <DynamicContainer bgColor={bgColor} textColor={textColor}>
        Hello World!
      </DynamicContainer>
      <p>Choose Background color</p>
      <input type="color" value={bgColor} onChange={handleBgChange} />
    </>
  );
}

const rootElement = document.getElementById("root");
ReactDOM.render(<App />, rootElement);

这是更新的代码和框

check here https://codesandbox.io/s/59193701-so-i0uy7

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何使用reactJs根据背景颜色更改字体颜色 的相关文章

随机推荐

  • Delphi:如何停止 TAction 快捷键自动重复?

    我正在使用 Delphi TActionList 带有用于某些操作的快捷键 我想防止某些操作被键盘自动重复多次触发 但我确实这样做not想要影响全局自动重复操作 这样做的最佳方法是什么 澄清 我仍然需要处理多个快速按键 这是only我想忽略
  • 如何使用扫描仪使该 switch 语句起作用?

    我正在尝试编写一个程序 将字母表中的任何字母 大写或小写 转换为拼音字母表 例如 如果我输入 A 或 a 我的程序会给我 将其更改为 Alpha 我对此和 switch 语句做了很多研究 但我总是陷入困境 我意识到我不能在扫描仪中使用 ch
  • 使用 chrome 进行 OfflineAudioContext FFT 分析

    我正在尝试构建一个波形生成器 它获取音频文件幅度值并在 JavaScript 中尽快 比实时更快 将它们显示到画布上 所以我使用 OfflineAudioContext webkitOfflineAudioContext 加载文件并开始分析
  • 如何更改 Linux 内核交换守护进程 (kswapd) 超时?

    我想通过使用闪存 SSD 等快速设备作为交换设备来减少 kswapd 超时以提高性能 您可以更改以下行为kswapd通过2种方式 通过Proc文件系统 From IBM 开发者工作坊 http www ibm com developerwo
  • Cuda Bayer/CFA 去马赛克示例

    我编写了一个 CUDA4 Bayer 去马赛克例程 但它比在 16 核 GTS250 上运行的单线程 CPU 代码慢 块大小是 16 16 图像暗淡是 16 的倍数 但更改此值并不会改善它 我做了什么明显愚蠢的事情吗 calling rou
  • 多个常数到一个矩阵并将它们转换为matlab中的块对角矩阵

    我有a1 a2 a3 它们是常数 我有一个矩阵A 我想做的是得到a1 A a2 A a3 A三个矩阵 然后我想将它们转移到对角块矩阵中 对于三个常数的情况 这很容易 我可以让b1 a1 A b2 a2 A b3 a3 A 然后在matlab
  • WCF 错误 - 已超出传入消息的最大消息大小配额 (65536) [重复]

    这个问题在这里已经有答案了 我的设置 托管在 IIS Express 中的 ASP NET 客户端 控制台应用程序中托管的 WCF 服务 在管理模式下运行 Visual Studio NET 2012 我试图从 WCF 服务返回 2 个 L
  • 如何在div中浮动span?

    我正在尝试学习如何在没有 Bootstrap 帮助的情况下实际使用 CSS 我有以下内容 可以在这里查看 http plnkr co edit FTCft1YOfQ4xy7FKWEHE p preview http plnkr co edi
  • 如何从新的 Lego Mindstorms Robot Inventor 上的自定义 Python 模块导入

    我一直在使用新的乐高 MINDSTORMS 机器人发明家 创建新的 项目 时 该项目似乎包含一个文件 然而 在每个示例代码文件的开头 我们可以看到 Mindstorm 模块已导入 如下所示 from mindstorms import MS
  • 从 Windows 10 bash shell 运行 Tomcat

    我在windows10 bash shell上安装了tomcat服务器 虽然它说 apache 正在运行 它没有在浏览器中打开管理面板 浏览器显示 无法到达连接 以前有人尝试过这个吗 请分享您的意见 谢谢 我假设您指的是 Windows 1
  • 我可以从闪存驱动器运行 Visual Studio 2010 吗?

    在我的工作中 我有一台装有 Windows 7 的新机器 我想保持我的开发技能 因此我想在该机器上加载我的 Visual Studio 2010 副本 但我没有管理员权限 我有一个 16 GB 闪存驱动器 是否可以将其加载到那里并从闪存驱动
  • 改变android中进度条的颜色

    我正在尝试更改水平进度条的颜色 但它没有改变 我做了一些谷歌搜索并浏览了您网站中给出的一些示例 但我没有成功地准确地改变颜色 我用了progressBar setProgressDrawable Drawable d 但它设置整个进度条视图
  • 想用jsp显示文件列表

    我是使用 glassfish 服务器的 netbeans 新手 我的 html 代码如下所示
  • 如何在 PHP 中包含一个类 [关闭]

    Closed 这个问题不符合堆栈溢出指南 help closed questions 目前不接受答案 我有文件index php 我想包含文件class twitter php在里面 我怎样才能做到这一点 希望当我将以下代码放入 index
  • TFS 构建服务器 - CSC:致命错误 CS2008:未指定输入

    当我们构建解决方案或错误引用的特定项目时 我们会在构建服务器上收到上述错误消息 我们可以使用 Visual Studio 也在构建服务器上 毫无问题地构建解决方案 但是在运行 msbuild 时会失败并出现上述错误 有任何想法吗 我找到了解
  • 在多个生命周期中运行 Maven 目标

    我有一个情况 我想在验证阶段和报告阶段运行 cobertura 插件 我有两个配置文件 它们都应该运行 cobertura 插件 但在配置文件 A 中 我只想创建 xml html 输出 但在配置文件 B 中 我将生成包含这些结果的完整站点
  • Selenium C# DefaultWait IgnoreExceptionTypes 不起作用

    我在等待 WebElement 可单击时使用 DefaultWait 尽管 TargetIncationException 是等待期间要忽略的异常列表中的异常之一 但在达到超时期限之前 我仍然有测试因该异常而失败 这不是我所期望的 publ
  • Linux下如何用C实现定时器的回调函数

    我已经在许多论坛上搜索了几天可能的解决方案 但没有运气 我在这里发布我的问题 非常感谢您的回复 主意 使用脚本控制灯光 Linux下C语言 应用场景 我有三盏灯 红 蓝 绿 脚本有控制它们的时间表 例如 从现在起10秒后 亮红灯2秒 从现在
  • 组合框 - 键入选择,然后单击焦点外 - 不会选择键入的项目

    我的组合框有问题 我有一个事件处理程序OnClick它根据选择的项目刷新数据 问题是当这种情况发生时 下拉组合框列出各种选项 在键盘上键入以查找匹配的项目 组合框更改此选择并调用OnClick event 由于此选择 事件 我的屏幕刷新 单
  • 如何使用reactJs根据背景颜色更改字体颜色

    我的容器有动态背景 它将由用户更改 因此我需要根据背景颜色设置文本颜色 例如 我设置容器的黑色背景 然后我需要为文本设置白色 我正在为我的应用程序使用 ReactJs 和材料 UI 库 请建议一些好的路径 请参阅下面的示例代码 import