Можно ли сделать программу Javascript, которая автоматически меняет цвет текста на контраст фона?

У меня есть этот код Javascript и HTML, который меняет цвет фона, используя ввод с типом цвета.

Вот код:

<!DOCTYPE html>
<html lang = "en">

<head>
  <meta charset = "UTF-8">
  <meta name = "viewport" content = "width=device-width, initial-scale=1.0">
  <title>Document</title>
  <style>
    input {
      outline: none;
      border: none;
      background: none;
    }
  </style>
</head>

<body>

  Change the color of the background:
  <input type = "color" value = "#000000" name = "bgcolor" id = "bgcolor" />

  <script>
    const color = document.getElementById("bgcolor");

    color.addEventListener("change", () => {    
      document.body.style.background = color.value;
    });
  </script>
</body>

</html>

Таким образом, это изменяет цвет фона страницы, когда пользователь меняет цвет в цветовой палитре, созданной <input type = "color" value = "#000000" name = "bgcolor" id = "bgcolor" /> .

Теперь представьте ситуацию, в которой пользователь выбирает черный цвет в качестве фона, а цвет текста по умолчанию также черный. Теперь есть две вещи, которые мы можем сделать:

Дайте возможность изменить цвет текста самостоятельно или изменить цвет текста на контраст фона автоматически.

Я хочу выбрать второй вариант, так как он немного красивее и выглядит немного более продвинутым для пользователя, как дополнительная продвинутая вещь, чтобы произвести впечатление на пользователей.

Итак, как мне реализовать второй вариант, может кто-нибудь объяснить мне, как изменить цвет текста на полную контрастность фона автоматически, когда пользователь устанавливает фон.

Такой цвет, как #ff0000, означает FF для красного и 00 для зеленого и синего. Вам нужно извлечь эти значения, разобрать их на 0-255 целых чисел, а затем вычесть каждое из них из 255, чтобы получить значение контраста. Теперь превратите их обратно в шестнадцатеричный формат, сложите вместе и используйте в качестве цвета текста.

user5734311 15.12.2020 11:58

Я думаю, это может решить вашу проблему: stackoverflow.com/a/35970186/14201528

secan 15.12.2020 11:59
stackoverflow.com/questions/7260989/… это может решить вашу проблему
Vibhor 15.12.2020 11:59

@ChrisG нет, я думаю, что моя ситуация немного отличается, я не хочу преобразовывать его в rgb, а затем обратно в шестнадцатеричный и прочее, что я просмотрел в ответах, но никто не помог.

user13944038 15.12.2020 12:03

@Vibhor Да, это помогло мне, но все же я немного застрял здесь, не смог понять некоторые концепции

user13944038 15.12.2020 12:04

@secan нет, извините, это не так

user13944038 15.12.2020 12:05

но спасибо @everyone, потому что все комментарии помогли, но ответ ниже был именно тем, что я хотел сделать

user13944038 15.12.2020 12:06

Чем именно отличается ваша ситуация...? Что еще должен означать change the text's color to its background's contrast automatically. тогда? Тот факт, что вы не понимаете код в существующих ответах, не означает, что ваш вопрос не является обманом.

user5734311 15.12.2020 12:06

@ChrisG хорошо, вы можете закрыть мой вопрос, но обратите внимание, что приведенный ниже ответ решил мою проблему, другие просто не подходили для моего кода, и многое из того, что я не смог понять.

user13944038 15.12.2020 12:08
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
В настоящее время производительность загрузки веб-сайта имеет решающее значение не только для удобства пользователей, но и для ранжирования в...
Безумие обратных вызовов в javascript [JS]
Безумие обратных вызовов в javascript [JS]
Здравствуйте! Юный падаван 🚀. Присоединяйся ко мне, чтобы разобраться в одной из самых запутанных концепций, когда вы начинаете изучать мир...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
JavaScript Вопросы с множественным выбором и ответы
JavaScript Вопросы с множественным выбором и ответы
Если вы ищете платформу, которая предоставляет вам бесплатный тест JavaScript MCQ (Multiple Choice Questions With Answers) для оценки ваших знаний,...
3
10
795
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Интересные ресурсы для этого:

Вот алгоритм W3C (с демо JSFiddle тоже):

const rgb = [255, 0, 0];

// Randomly change to showcase updates
setInterval(setContrast, 1000);

function setContrast() {
  // Randomly update colours
  rgb[0] = Math.round(Math.random() * 255);
  rgb[1] = Math.round(Math.random() * 255);
  rgb[2] = Math.round(Math.random() * 255);

  // http://www.w3.org/TR/AERT#color-contrast
  const brightness = Math.round(((parseInt(rgb[0]) * 299) +
                      (parseInt(rgb[1]) * 587) +
                      (parseInt(rgb[2]) * 114)) / 1000);
  const textColour = (brightness > 125) ? 'black' : 'white';
  const backgroundColour = 'rgb(' + rgb[0] + ',' + rgb[1] + ',' + rgb[2] + ')';
  $('#bg').css('color', textColour); 
  $('#bg').css('background-color', backgroundColour);
}
#bg {
  width: 200px;
  height: 50px;
}
<script src = "https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>

<div id = "bg">Text Example</div>

Другие вопросы по теме