Проблема в том, что оператор if внутри функции toggle_visibility
if(g.style.background == '#F5F5F5')
.background не относится только к цвету.Он может содержать до восьми отдельных свойств.
Например, если вы зарегистрируете это
console.log(g.style.background);
, вы увидите следующую строку
rgb (245, 245, 245) нет повторной прокрутки 0% 0%
в консоли.
Это означает, что сравнение if(g.style.background == '#F5F5F5')
никогда не будет верным.
Более тогокак вы можете видеть из приведенного выше, он возвращает значение rgb вместо шестнадцатеричного числа, поэтому вам нужно сначала преобразовать цвет в шестнадцатеричный.Есть удобная библиотека, которая делает эту работу w3color
Вот полный пример:
function toggle_visibility() {
var e = document.getElementById('on');
if (e.style.display == 'none')
e.style.display = 'block';
else
e.style.display = 'none';
var f = document.getElementById('off');
if (f.style.display == 'block')
f.style.display = 'none';
else
f.style.display = 'block';
var g = document.getElementById('sidenav');
if (w3color(g.style.backgroundColor).toHexString().toUpperCase() == '#F5F5F5') {
g.style.backgroundColor = '#252525';
} else
if (w3color(g.style.backgroundColor).toHexString().toUpperCase() == '#252525') {
g.style.backgroundColor = '#F5F5F5';
}
}
<script src="https://www.w3schools.com/lib/w3color.js"></script>
<div id="sidenav" style="background-color: #F5F5F5">
<div class="btn-area" onclick="toggleNav()">☰</div>
<ul>
<div class="button">
<button onclick="; toggle_visibility();" class="lightbutton">
<span id="on">Turn Off the lights</span>
<span id="off" style="display: none">Turn On the lights</span>
</button>
</div>
</ul>
</div>