Twój zapis
window.addEventListener("click", function() {
document.getElementById("welcome").style.fontSize = "90px";
document.getElementById("welcome").style.color = "red";
document.getElementById("welcome").style.backgroundColor = "blue";
document.getElementById("welcome").style.padding = "0px 5px 35px 5px";
setTimeout(function()
{
document.getElementById("action").innerHTML = "";
}, 5000);
});
"za drugim razem" nie działa, ponieważ "czyścisz" całą zawartość div-a id=action poleceniem
setTimeout(function()
{
document.getElementById("action").innerHTML = "";
}, 5000);
wtedy przy kolejnym kliknięciu
document.getElementById("welcome") ...
zwraca błąd, bo div id=action nie zawiera
<span id="welcome" class="welcome">Welcome in clicker game</span>
reasumując div id=action, przed kliknięciem
<div id="action" class="action">
<span id="welcome" class="welcome">Welcome in clicker game</span>
</div>
po kliknięciu i wykonaniu: innerHTML = ""
<div id="action" class="action"></div>
Można to "naprawić" np. dodając warunek, który sprawdzi czy element span id=welcome "istnieje" w div id=action (tak naprawdę, czy istniej w ogóle w DOM strony)
window.addEventListener("click", function() {
if (document.getElementById("welcome")) {
document.getElementById("welcome").style.fontSize = "90px";
document.getElementById("welcome").style.color = "red";
document.getElementById("welcome").style.backgroundColor = "blue";
document.getElementById("welcome").style.padding = "0px 5px 35px 5px";
setTimeout(function()
{
document.getElementById("action").innerHTML = "";
}, 5000);
} else {
// tu inny kod gdy innerHTML = ""
// wykasuje <span id="welcome" ...>
}
});
druga sprawa, ten zapis
. . .
document.getElementById("welcome").style.fontSize = "90px";
document.getElementById("welcome").style.color = "red";
document.getElementById("welcome").style.backgroundColor = "blue";
document.getElementById("welcome").style.padding = "0px 5px 35px 5px";
. . .
możesz zapisać w takiej postaci (welcome-get-bigger - nazwa klasy przykładowa)
dodaj do css-a
.welcome-get-bigger
{
font-size: 90px;
color: red;
background-color: blue;
padding: 0px 5px 35px 5px;
}
a w js-ie, tak
window.addEventListener("click", function() {
document.getElementById("welcome").classList.add("welcome-get-bigger");
setTimeout(function()
{
document.getElementById("action").innerHTML = "";
}, 5000);
});
ponieważ raczej trzeba dodatkowo usuwać właściwości jak backgroundColor, fontSize itp.,
wtedy też całą klasę usuwasz jedną linijką kodu
. . .
document.getElementById("welcome").classList.remove("welcome-get-bigger");
. . .
możesz też włączać i wyłączać klasy ("pstryczek" )
<button id="switch" class="switch">Toggle</button>
.switch {
cursor: pointer;
width: 200px;
height: 40px;
font-size: 10px;
color: initial;
background-color: initial;
transition: all 1s;
}
.get-bigger {
font-size: 20px;
color: limegreen;
background-color: black;
}
// document.getElementById("switch")
document.querySelector("#switch").addEventListener("click", ({target}) => {
target.classList.toggle("get-bigger");
})
inny wariant
<button id="switch" class="switch">Nie mam klasy get-bigger</button>
.switch {
cursor: pointer;
width: 300px;
height: 40px;
font-size: 10px;
color: initial;
background-color: initial;
transition: all 1s;
}
.get-bigger {
font-size: 20px;
color: limegreen;
background-color: black;
}
document.querySelector("#switch").addEventListener("click", ({target}) => {
if (target.classList.contains("get-bigger")) {
target.classList.remove("get-bigger");
target.textContent = "Nie mam klasy get-bigger";
} else {
target.classList.add("get-bigger");
target.textContent = "Mam klasę get-bigger";
}
})
[ Funkcja strzałkowa ] [ classList() - CSS i Javascript ]