#javascript #html #css
#javascript #HTML #css
Вопрос:
У меня есть простая кнопка JavaScript light / dark mode, но я не знаю, как облегчить переход как из, так и из. Вот CSS:
.night-mode {
background-color:#2a2d30;
color:white;
transition:0.4s ease-in-out;
}
Вот JS и HTML:
<button onclick="night()">night mode</button>
<script>
function night() {
var element = document.body;
element.classList.toggle("night-mode");
}
</script>```
Ответ №1:
Проблема в том, что вы помещаете переход в класс, который вы устанавливаете / удаляете, он должен быть независимым от него.
Что бы я сделал, если вы просто меняете элемент body, так это настроить переход в этом виде:
body {
transition: color .4s ease-in-out, background-color .4s ease-in-out;
/* set the light colors here if needed */
}
.night-mode {
background-color:#2a2d30;
color:white;
}
Обратите внимание, что в приведенном выше коде я устанавливаю переход не для каждого отдельного свойства, а только для тех, которые мы действительно хотим анимировать.
Естественно, если вы хотите, чтобы анимация работала не только с телом, но и с конкретными элементами (например, некоторые части вашего пользовательского интерфейса должны оставаться неизменными, также, например, ссылка не наследует цвета) Я бы создал служебный класс, например:
.with-colors-transition {
transition: color .4s ease-in-out, background-color .4s ease-in-out;
/* set the light colors here if needed */
}
и примените это ко всем элементам, которые вы хотите добавить / удалить в ночном режиме
Ответ №2:
Вы можете сделать это, если добавите другой вызываемый класс dark-mode-off
. Затем установите для класса body это значение. В JS добавьте глобальную переменную, чтобы проверить, включен или выключен darkmode. В зависимости от этого замените текущий класс другим.
var darkmodeon = false;
function night() {
var element = document.body;
if (darkmodeon) {
element.classList.replace("night-mode-on", "night-mode-off");
} else {
element.classList.replace("night-mode-off", "night-mode-on");
}
darkmodeon = !darkmodeon;
}
.night-mode-on {
background-color: #2a2d30;
color: white;
transition: 0.4s ease-in-out;
}
.night-mode-off {
background-color: #fff;
color: black;
transition: 0.4s ease-in-out;
}
<body class="night-mode-off">
<button onclick="night()">night mode</button>
</body>
Чтобы избежать длинного оператора if, вы можете сделать его одной строкой:
element.classList.replace(darkemodeon ? "night-mode-on" : "night-mode-off", darkemodeon ? "night-mode-off" : "night-mode-on");