解决了!检查JavaScript中的CSS值

ffx8fchx  于 2023-04-04  发布在  Java
关注(0)|答案(4)|浏览(91)

我想让JavaScript检查我的css代码并返回我,如果背景颜色= #222327,它会将背景颜色更改为#29fd53,但如果旧的背景颜色= #29fd53,它会将背景颜色更改为#222327
我的JS代码

function changeBgC(){
var body = document.getElementsByTagName("body")[0];

var computedStyle = window.getComputedStyle(body)

var bodyBackgroundValue = computedStyle.getPropertyValue("background-color")
console.log(bodyBackgroundValue);
if (bodyBackgroundValue == "#222327") {
    document.querySelector('body').style.backgroundColor = "#29fd53"
  } else {
    document.querySelector('body').style.backgroundColor = "#222327"
  }
}
.body{
    width: 100%;
    height: 100vh;
    min-height: 100vh;
    background: #222327;
}
<div class="box">
<button onclick="changeBgC()" class="menuButton">≣</button>
</div>

我只是尝试使用i++(我在我的html代码中使用onclick),但它只将背景颜色更改为#29fd53。当我再次按下按钮时,它不会做任何事情。
这就是我的尝试

function changeBgC(){
    var i = 0
    if (i % 2 === 0){
        document.querySelector('.body').style.backgroundColor = "#29fd53"
        console.log(i);
        i+=1
    }else{
        document.querySelector('.body').style.backgroundColor = "#222327"
        i+=1
    }
}
mrwjdhj3

mrwjdhj31#

你的问题在于在函数作用域内设置i变量。所以每次你调用changeBgC()时,它都会设置i = 0。
在函数外声明i,它应该可以工作

let i = 0;
function changeBgC(){
    if (i % 2 === 0){
        document.querySelector('.body').style.backgroundColor = "#29fd53"
        console.log(i);
        i+=1
    }else{
        document.querySelector('.body').style.backgroundColor = "#222327"
        i+=1
    }
}
vi4fp9gy

vi4fp9gy2#

这可以通过使用class而不是function来实现。这样就可以封装i变量。我使用了私有成员(#),因为它们在类外部不需要。

class backg {

#i=0;
#elem=document.body.style;

change() {
  this.#i=!this.#i;
  this.#elem.backgroundColor = this.#i?"#29fd53":"#222327";
 }
}

bkg=new backg();
.body{
    width: 100%;
    height: 100vh;
    min-height: 100vh;
    background: #222327;
}
<div class="box">
<button onclick="bkg.change();" class="menuButton">≣</button>
</div>
svgewumm

svgewumm3#

正如@Teemu上面提到的getComputedStyle()返回一个rgb()值,所以要获得HEX代码,你可以使用css变量,而不是写一个函数来从RGB转换到HEX,

用于删除尾随空格的trim函数

function changeBgC(){
  let bgColor = getComputedStyle(document.body).getPropertyValue('--bg-color').trim();
  if(bgColor == "#222327"){
    document.body.style.setProperty('--bg-color', '#29fd53');
  } else {
    document.body.style.setProperty('--bg-color', '#222327');
  }
}
body{
   --bg-color: #222327;
    width: 100%;
    height: 100vh;
    min-height: 100vh;
    background-color: var(--bg-color);
}
<div class="box">
  <button onclick="changeBgC()" class="menuButton">≣</button>
</div>
ct3nt3jp

ct3nt3jp4#

不要使用JavaScript直接改变元素的样式来切换主题。

但是,切换主题的更好解决方案是使用CSS变量,而不是直接使用JavaScript更改元素的样式。
这种方法有几个好处,包括更好的性能,更容易维护,更灵活。下面是一个如何使用CSS变量在浅色和深色主题之间切换的示例:
1.使用CSS变量更改颜色:

.theme-light {
  --bg-primary: #29fd53;
}

.theme-dark {
  --bg-primary: #222327;
}

body {
  background: var(--bg-primary);
}

1.切换主题:

function switchTheme() {
    let themes = ['theme-light', 'theme-dark'];
    let currentTheme = [...document.body.classList].find(c => themes.includes(c)) ?? themes[0]
    let nextTheme = themes[themes.indexOf(currentTheme)+1] ?? themes[0]
    document.body.classList.remove(...themes) // removes all theme classes, including the current one
    document.body.classList.add(nextTheme)
}
  1. HTML代码段:
<div class="box">
  <button onclick="switchTheme()" class="menuButton">≣</button>
</div>

1.别忘了为主体添加一个初始类,其中包含以下主题之一:
一个三个三个一个

相关问题