Как переключаться между двумя документами CSS с помощью <button> в HTML

Я пытаюсь использовать темную тему и светлую тему на своей веб-странице, но не могу найти способ переключать их с помощью одной кнопки (поэтому 1-й щелчок кнопки включает темную тему, а 2-й раз выключает ее) . Я бы предпочел иметь возможность делать это без использования сторонней библиотеки JavaScript. Я нашел способ сделать это с помощью элемента <option>, но это не «кнопка переключения», которую я хочу:

  <button onclick=getTheme() id=themeToggle>Click to use this theme.</button>
    <select id = "select">
        <option>Dark Theme</option>
        <option>Revert To Original</option>
    </select>

а также

function getTheme () {
    function changeTheme (Theme) {
        document.getElementById('style').setAttribute('href', Theme);
    }
    var index = document.getElementById("select").selectedIndex;
    switch (index) {
        case 0:
          changeTheme('css/dark.css');
          break;
          case 1: changeTheme('css/main.css');
    }
}

Спасибо за вашу помощь!

stackoverflow.com/questions/8796107/…
Ajay Makwana 11.04.2019 14:44

Возможный дубликат Как сделать сменные темы с помощью CSS и JavaScript

Rob 11.04.2019 14:45

@Rob "Я нашел способ сделать это..." - TO запрашивает кнопку для переключения между двумя состояниями

Andreas 11.04.2019 14:52

Используйте замыкание, глобальную переменную, проверьте значение атрибута href,...

Andreas 11.04.2019 14:55
Поведение ключевого слова "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
4
586
3
Перейти к ответу Данный вопрос помечен как решенный

Ответы 3

Я знаю, это кажется немного любительским, но вы можете сделать что-то вроде этого,

<button onclick=getTheme() id=themeToggle>Click to use this theme.</button>
<script>
var click = 0;
function getTheme()
{   
    click++;
    if (click%2 == 0)
        changeTheme('css/dark.css');
    else
        changeTheme('css/main.css');
}
</script>

и соответствующим образом измените текст на кнопке. Дайте мне знать, если это работает.

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

Другой способ — использовать логическое значение. Вы можете изменить значение логического значения при каждом щелчке. И вы можете переключать css с помощью этого логического значения.

<button onclick=getTheme()>Click to use this theme.</button>

Js

var bool = true;
function getTheme() { 
  function changeTheme (theme) {
    document.getElementById('style').setAttribute('href', theme);
  }  

  bool = !bool;
  var theme = bool ? 'css/dark.css' : 'css/main.css';
  changeTheme(theme);
}

Изменить на основе комментария

This does work perfectly, however, is there a way to use document.getElementById("themeToggle").innerHTML = "New text!"; with this to change the button between "dark theme" or "light theme"

Вы можете использовать ту же логику, например:

var bool = true;
function getTheme() { 
  function changeTheme (theme, text) {
    document.getElementById('style').setAttribute('href', theme);
    document.getElementById('themeToggle').innerText = text;
  }  

  bool = !bool;
  var theme = bool ? 'css/dark.css' : 'css/main.css';
  var text  = bool ? 'Dark theme' : 'Light theme';
  changeTheme(theme, text);
}

это работает отлично, однако есть ли способ использовать document.getElementById("themeToggle").innerHTML = "New text!"; с этим, чтобы изменить кнопку между «темной темой» или «светлой темой»

Wyatt Nulton 11.04.2019 15:48

Вау хороший ответ

Md. Abu Sayed 11.04.2019 16:06

Простой способ:

HTML

<input type = "button" value = "Dark" id = "button" onclick=getTheme()></input> 

JavaScript

function getTheme () {
  var button = document.getElementById("button");
    if (button.value === "Dark") {
      button.value = "Revert To Original";
    } else {
      button.value = "Dark";
    }
}

Внутри if/else вы можете поместить свою функцию изменения темы.

https://codepen.io/anon/pen/xedzVz?editors=1111

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