Переключение между двумя цветами фона веб-страницы с помощью CSS Switch

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

  <style> 
        h1 { 
            color: green; 
        } 
                
        /* toggle in label designing */ 
        .toggle {
            float: none;
            position : fixed ; 
            display : inline-block; 
            width: 80px;
            height: 38px;
            background-color: grey; 
            border-radius: 30px; 
            border: 2px solid white;
            top: 6px;
            left: 896px;
            
        }   
                
        /* After slide changes */ 
        .toggle:after { 
            content: &#39;&#39;; 
            position: absolute; 
            width: 38px;
            height: 35px; 
            border-radius: 50%; 
            background-color: white; 
            top: -1px; 
            left: 0px;
            
            transition: all 0.5s; 
        } 
                
        /* Toggle text */ 
        p { 
            font-family: Arial, Helvetica, sans-serif; 
            font-weight: bold; 
        } 
                
        /* Checkbox cheked effect */ 
        .checkbox:checked + .toggle::after { 
            left : 38px; 
        } 
                
        /* Checkbox cheked toggle label bg color */ 
        .checkbox:checked + .toggle { 
            background-color: #5ad94d; 
        } 
                
        /* Checkbox vanished */ 
        .checkbox { 
            display : none; 
        } 
    </style>

-HTML

       <input class='checkbox' id='switch' type='checkbox'/> 
        <label class='toggle' for='switch'> 
            <p>ON   OFF</p> 
        </label> 

-Javascript

<script>

document.getElementById(&quot;switch&quot;).addEventListener(&#39;click&#39;, function(){
    document.getElementsByClassName(&quot;mainWrapper fullWidth&quot;)[0].style.backgroundColor = document.getElementById(&quot;switch&quot;).toggle ? &quot;white&quot; : &quot;black&quot;;
});
    </script> 

снова мой код работает нормально. Мне просто нужно переключаться между двумя цветами: белым и черным. Мне нужна помощь, чтобы изменить код JavaScript, чтобы включить переключатель между белым и черным цветами. Любые идеи ??? благодарить!

Где твой mainWrapper?

Praneet Dixit 10.12.2020 18:27

Обратите внимание, что в предоставленном вами HTML-коде нет элемента HTML с классом mainWrapper...

Heretic Monkey 10.12.2020 18:27

@PraneetDixit это главная страница моего веб-сайта, на ней много кода, важной частью является изменение цвета фона.

user14775523 10.12.2020 18:30

@HereticMonkey, это главная страница моего веб-сайта, на ней много кода, важной частью является изменение цвета фона.

user14775523 10.12.2020 18:30

Почитайте минимальный воспроизводимый пример - акцент на завершение.

freedomn-m 10.12.2020 18:31

@ user14775523, значит, вам нужно изменить цвет фона для каждого элемента с классом mainWrapper?

Praneet Dixit 10.12.2020 18:32

В любом случае проблема в том, что вы используете getElementsByClassName так, как будто он возвращает один элемент. Это не так, как объясняет ссылка в моем первом комментарии.

Heretic Monkey 10.12.2020 18:35
document.getElementsByClassName возвращает коллекцию/массив, поэтому вам нужно выполнить их итерацию — или просто использовать jquery (поскольку вы пометили [jquery]) — $("#tog-bg").click(function() { $(".mainWrapper").css("background-color", this.checked ? "white" : "black")})
freedomn-m 10.12.2020 18:37

@freedomn-m моя основная упаковка .mainWrapper{margin:0 auto;background-color:#fff;box-shadow:0 0 10px 3px rgba(0,0,0,0.1)}

user14775523 10.12.2020 18:39

Можете ли вы предоставить свой код mainWrapper?

Pavithra Muthusamy 10.12.2020 18:40

@HereticMonkey мой mainWrapper .mainWrapper{margin:0 auto;background-color:#fff;box-shadow:0 0 10px 3px rgba(0,0,0,0.1)} когда я меняю цвет фона, он отлично работает, мне просто нужно, чтобы кнопка делала это, ты меня чувствуешь?

user14775523 10.12.2020 18:40

Альтернативный вариант ответа: Как получить только один элемент по имени класса? В итоге: используйте document.getElementsByClassName("mainWrapper")[0].style...

freedomn-m 10.12.2020 18:41
Поведение ключевого слова "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) для оценки ваших знаний,...
0
12
239
3
Перейти к ответу Данный вопрос помечен как решенный

Ответы 3

getElementByClassName возвращает коллекцию

Так что код должен быть

//add [0] to both getElementByClassName
document.getElementsByClassName("mainWrapper")[0].style.backgroundColor

Также здесь нет класса mainWrapper, поэтому вы должны создать родительский div с классом mainWrapper

Я знаю это, но ваш код не предназначен для кнопки, которая будет ПЕРЕКЛЮЧАТЬСЯ между белым и черным цветом для mainWrapper, когда пользователь нажимает ее.

user14775523 10.12.2020 18:43

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

freedomn-m 10.12.2020 18:53

@freedomn-m я тупой, извини, я не знаю, как это сделать

user14775523 11.12.2020 01:32

@user14775523 user14775523 достаточно честно - ваш код имеет это дважды document.getElementsByClassName("mainWrapper ").style.backgroundColor = вы меняете оба на это document.getElementsByClassName("mainWrapper ")[0].style.backgroundColor = и все готово (вы можете скопировать этот комментарий в текстовый редактор, а затем выровнять код, чтобы увидеть разницу - обертка в этом комментарий может скрыть разницу)

freedomn-m 11.12.2020 11:16
Ответ принят как подходящий

getElementsByClassName() возвращает html collection object. Это коллекция. Если вы хотите найти первый элемент с классом, вам нужно использовать индекс [0], как показано ниже:

document.getElementById("tog-bg").addEventListener('click', function(){
    document.getElementsByClassName("mainWrapper")[0].style.backgroundColor = document.getElementById("tog-bg").checked ? "white" : "black";
});

Если вы хотите сделать это для всех элементов с указанным классом, вы можете зациклить его, как показано ниже:

document.getElementById("tog-bg").addEventListener('click', function(){
    for(let i = 0; i < document.getElementsByClassName("mainWrapper").length; i++){
        document.getElementsByClassName("mainWrapper")[i].style.backgroundColor = document.getElementById("tog-bg").checked ? "white" : "black";
    }
});

Я использую тернарный оператор вместо условия if else в приведенном выше фрагменте. Кроме того, я заменил событие change на событие click в слушателе.

ваш код сработал!! но мне нужно переключаться между цветами при нажатии кнопки@Praneet Dixit

user14775523 11.12.2020 02:03

@ user14775523 Что вы подразумеваете под «переключением между цветами»? Вы хотите изменить цвет текста?

Praneet Dixit 11.12.2020 04:01

НЕТ цветов фона, белый и черный

user14775523 11.12.2020 19:22

Это сработало для меня в firefox (не в стиле, а функционально):

document.getElementById("tog-bg").onclick = function(){
      var e;
    if ( (e = document.getElementById("tog-bg")).hasAttribute('checked')) {
      var w = document.getElementsByClassName("mainWrapper ");
      for(i=0;i<w.length;++i)
      {
        w[i].style.backgroundColor = "black";
      }
      e.removeAttribute('checked');
    } else {
      var w = document.getElementsByClassName("mainWrapper ");
      for(i=0;i<w.length;++i)
      {
        w[i].style.backgroundColor = "white";
      }
      e.setAttribute('checked','');
    }
  };

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