3
respostas

Alterações visuais pela metade ao concluir.

Olá pessoal, como vão?

Estou com um problema de CSS que quando coloco para alternar entre as classes ele faz algumas alterações mas na principal ele não faz que ao clicar em concluir ele deve "cortar" a linha. Alguem sabe me dizer onde estou errando?

const conclusao = function() {

    let botaoConcluir = document.createElement('button');
    botaoConcluir.classList.add('check-button');
    botaoConcluir.innerText = 'Concluir';

    botaoConcluir.addEventListener('click', function (event) {
        let alvo = event.target;
        let concluido = alvo.parentElement;
        concluido.classList.toggle('done');
    })
    return botaoConcluir;


}

Código completo:

const botao = document.querySelector(".botao");

botao.addEventListener('click', function(event) {

    event.preventDefault();
    adicionar();
    conclusao();
})

const adicionar = function () {
    const input = document.querySelector(".input");
    const valor = input.value;
    const conteudo = `<p class="conteudo">${valor}</p> `;

    const ul = document.querySelector(".lista");
    const li = document.createElement("li");
    li.classList.add('task');

    ul.appendChild(li);  
    li.innerHTML = conteudo;
    li.appendChild(conclusao());    


    input.value = '';
}

const conclusao = function() {

    let botaoConcluir = document.createElement('button');
    botaoConcluir.classList.add('check-button');
    botaoConcluir.innerText = 'Concluir';

    botaoConcluir.addEventListener('click', function (event) {
        let alvo = event.target;
        let concluido = alvo.parentElement;
        concluido.classList.toggle('done');
    })
    return botaoConcluir;


}
3 respostas

Fala Yago, tudo bem?

A funcionalidade do javascript funciona corretamente certo? Se você inspecionar o elemento, você consegue ver as classes alternando?

Da uma conferida também se na classe done você adicionou corretamente a estilização para que o texto seja riscado!

Se possivel, envia aqui pra gente o código completo do CSS, ta bom?

Aguardo o retorno :D

Olá Mateus, boa noite! Tudo bem?

Desculpe a demora para retornar a mensagem. Estive reanalisando o meu código com as dicas que vc passou e inspecionando o elemento as classes realmente mudam ao clicar no concluir, porém conforme tradução da palavra (toggle) eu esperava que ela alternasse entre uma classe e outra e aparentemente ela apenas acrescenta a palavra inserida no toggle, vou exemplificar:

Primeiramente essa é a linha antes de clicar no concluir:

<li class = 'task'></li>

E após pressionar o botão concluir:

<li class = 'task done'><li>

Abaixo o código CSS:

body {
  margin: 0;
}

.app {
  display: flex;
  align-items: center;
  justify-content: center;
  width: 100vw;
  min-height: 100vh;
}

.todo-list {
  background-color: #0B2027;
  font-family: "Space Mono", monospace;
  padding: 1rem;
  min-width: 400px;
  min-height: 300px;
}

.title {
  border-bottom: 1px solid rgba(246, 241, 209, 0.5);
  font-size: 1.5rem;
  font-family: "BioRhyme", serif;
  color: #F6F1D1;
}

.form {
  display: flex;
  justify-content: center;
}

.form-input,
.form-button {
  border-radius: 0;
  padding: 0.75rem;
  font-size: 0.75rem;
}

.form-input {
  outline: none;
  background-color: #F6F1D1;
  border-color: rgba(255, 255, 255, 0.1);
}

.form-button {
  border: 1px;
  background: #F6F1D1;
  text-transform: uppercase;
  cursor: pointer;
  margin-left: 0.25rem;
}

.form-button:hover {
  color: #F6F1D1;
  background: rgba(246, 241, 209, 0.1);
}

body {
  margin: 0;
}

.app {
  display: flex;
  align-items: center;
  justify-content: center;
  width: 100vw;
  min-height: 100vh;
}

.todo-list {
  background-color: #0B2027;
  font-family: "Space Mono", monospace;
  padding: 1rem;
  min-width: 400px;
  min-height: 300px;
}

.title {
  border-bottom: 1px solid rgba(246, 241, 209, 0.5);
  font-size: 1.5rem;
  font-family: "BioRhyme", serif;
  color: #F6F1D1;
}

.form {
  display: flex;
  justify-content: center;
}
.form-input, .form-button {
  border-radius: 0;
  padding: 0.75rem;
  font-size: 0.75rem;
}
.form-input {
  outline: none;
  background-color: #F6F1D1;
  border-color: rgba(255, 255, 255, 0.1);
}
.form-button {
  border: 1px;
  background: #F6F1D1;
  text-transform: uppercase;
  cursor: pointer;
  margin-left: 0.25rem;
}
.form-button:hover {
  color: #F6F1D1;
  background: rgba(246, 241, 209, 0.1);
}

.list {
  padding: 0;
  list-style: none;
  width: 100%;
}

.task {
  background-color: rgba(255, 255, 255, 0.1);
  color: #F6F1D1;
  display: flex;
  justify-content: space-between;
  margin-bottom: 0.5rem;
  padding: 1rem 3rem;
}

.check-button, .delete-button {
  background-color: #F6F1D1;
  border: none;
  box-shadow: 0 0 8px rgba(0, 0, 0, 0.1);
  outline: none;
  border-radius: 2px;
  cursor: pointer;
}

.task.done .check-button {
  background-color: #46494C;
  color: #F6F1D1;
}

.check-icon {
  display: block;
  padding: 1px;
  width: 10px;
  height: 10px;
  background-color: transparent;
  border-radius: 50%;
}

.task.done .check-icon {
  background-color: #0B2027;
}

.content {
  margin: 0;
}

.task.done .content {
  text-decoration: line-through;
}

No aguardo de suas considerações.

Desde já obrigado!

Então Yago, o toggle irá alterar a classe, se o elemento possui a classe, irá remove-la, se o elemento não possuir a classe, irá adiciona-la ao elemento. Aparentemente está tudo certo com o seu código, ja que como você observou a classe é adicionada. Então acho melhor, se possivel, compactar o projeto e enviar aqui pra gente o link de download (você pode enviar no drive, mediafire, github, mega e outros), ta bom?

Aguardo o seu retorno :D