1. Вы запускаете функцию, устанавливая isOn
в false
. поэтому Boolean(isOn) === false
всегда возвращаются true
. Вы должны инициализировать переменную isOn
вне функции
2 Почему вы конвертируете isOn
в логическое значение? это уже логический тип ..
3 Вам на самом деле не нужно else if
.. если это не ложь, то это правда ..
4. , как упомянуто в комментарии ниже, не нужно повторно инициализировать isOn
внутри if else
var isOn = false;
function darkMode () {
if(!isOn) {
document.documentElement.setAttribute('data-theme', 'dark');
isOn = true;
}
else {
document.documentElement.setAttribute('data-theme', 'light');
isOn = false;
}
}
еще более элегантным способом, вы можете сделать:
var isOn = false;
function darkMode () {
document.documentElement.setAttribute('data-theme', ['dark', 'light'][+isOn]);
isOn = !isOn;
}
объяснение
+isOn
преобразовать его в число, чтобы true
стало 1
и false
стало 0
. Затем вы используете этот номер в качестве индекса, чтобы выбрать dark
или light
соответственно.
isOn=!isOn
переверните текущее значение isOn
- true
станьте false
и false
станьте true