Javascript débutant ici. Je veux essentiellement faire un simple changement. Si un élément est noir, changez-le en blanc. S'il est blanc, changez-le en noir.
<button class="normal" id="myButton" onclick='changeClass()' >Change Colour</button>
function changeClass() {
if (document.getElementById('myButton').style.backgroundColor == "white") {
document.getElementById('myButton').style.backgroundColor = "black";
} else {
document.getElementById('myButton').style.backgroundColor = "white";
}
}
Ce code est cependant assez compliqué. Y a-t-il une meilleure manière de faire cela?
6 Réponses :
Bascule une classe:
<button class="normal" id="myButton" onclick='changeClass()'>Change Colour</button>
où se trouve votre CSS:
.the-class {
background-color: black;
}... en supposant que la couleur d'arrière-plan normale de l'élément est le blanc.
En savoir plus sur classList ici . Le support est bon, mais vous aurez peut-être besoin d'un polyfill dans des environnements plus anciens.
Exemple:
function changeClass() {
document.getElementById('myButton').classList.toggle("the-class");
}
.the-class {
background-color: black;
}
function changeClass(){
document.getElementById('myButton').classList.toggle("the-class");
}
Vous pouvez utiliser classList.toggle()
<button class="normal" id="myButton">Change Colour</button>
.black{
background:black
}
document.querySelector('#myButton').addEventListener('click',e => {
e.target.classList.toggle('black')
})
Accepterait celui-ci, car il détaille également comment supprimer cet onclick du HTML, ce qui est bon car lier directement JS au HTML est généralement considéré comme une mauvaise pratique.
et si le blanc n'est pas la couleur par défaut que vous pouvez refactoriser en utilisant? opérateur:
let btn = document.getElementById('myButton');
btn.style.backgroundColor = btn.style.backgroundColor === 'white' ? 'black' : 'white';
Utilisez quelque chose comme classList.toggle()
<button onclick="switchColor()">Click me</button> <div id="resultDiv" class="element toggle"></div>
.element {
height: 100px;
width: 100px;
background-color: red;
}
.element.toggle{
background-color: blue !important;
}
function switchColor(){
document.getElementById("resultDiv").classList.toggle("toggle")
}
Vous pouvez créer une classe spécifique dans votre css (par exemple, la classe .black qui contient une règle background-color: black; ), puis attacher / détacher cette classe en fonction de votre état.
Votre élément DOM (balise HTML) a une propriété classList pratique, qui peut être traitée comme une liste de classes attachées à ce DOM. Je suggère de lire un peu plus à ce sujet ici .
Dans l'ensemble, votre fonction peut s'écrire comme:
const element = document.getElementById("coolDiv");
element.classList.toggle('black')
ou même un peu plus concis avec un opérateur ternaire
const element = document.getElementById("coolDiv");
element.classList.contains('black') ?
element.classList.remove('black') : element.classList.add('black')
Pour cette action javascript externe non nécessaire, vous pouvez écrire du javascript en ligne simple ici le code:
<button class="normal" onclick="this.classList.toggle('black-button')">Change Colour</button>
.black-button {
background: black;
color: #fff;
outline: 0;
padding: 20px;
}
button {
transition: 0.3s;
cursor: pointer;
}