2
respostas

[Dúvida] Active não está funcionando Help

Boa tarde pessoal active não está funcionando? já bati cabeça e não consigo localizar o erro, desde já agradeço a ajuda.

js

const html = document.querySelector('html'); //seleciona o html
const focoBt = document.querySelector('.app__card-button--foco');//seleciona o botão foco
const curtoBt = document.querySelector('.app__card-button--curto');//seleciona o botrão curto
const longoBt = document.querySelector('.app__card-button--longo');//seleciona o botão descanso longo
const banner = document.querySelector('.app__image'); //seleciona as imagnes que tenho que trocar ao clicar nos botões
const titulo = document.querySelector('.app__title');
const botoes = document.querySelectorAll('.app__card-button');

const temporizador = document.getElementsByClassName ('.app__card-primary-button-wrapper');
const imagens = document.getElementsByClassName('app__image');
const frases = document.getElementsByClassName('app__title');

console.log(temporizador, imagens, frases);

const botaoTemporizador = document.getElementById('start-pause');//puxei o id em vez da classe
const botaoFoco = document.getElementsByClassName('app__card-button--foco');
const botaoCurto = document.getElementsByClassName('app__card-button--curto');
const botaoLongo = document.getElementsByClassName('app__card-button--longo');

temporizadorFoco = 1500;
temporizadorCurto = 300;
temporizadorLongo = 900;

focoBt.addEventListener('click', () =>{
    /*html.setAttribute('data-contexto', 'foco');
    banner.setAttribute('src', '/imagens/foco.png'); // muda o atributo da imagem ao clicar*/
    alterarContexto('foco')
        focoBt.classList.add('active')
})//mudando atributo das páginas ao clicar no botão

curtoBt.addEventListener('click', () =>{
    alterarContexto('descanso-curto')
    curtoBt.classList.add('active')

})

longoBt.addEventListener('click', () =>{
    alterarContexto('descanso-longo')
        longoBt.classList.add('active')
})

function alterarContexto(contexto) {
    botoes.forEach(function (contexto) {
        contexto.classList.remove('active')
})
    html.setAttribute('data-contexto', contexto)
    banner.setAttribute('src', `/imagens/${contexto}.png`)
    switch (contexto) {
        case "foco":
            titulo.innerHTML = `
            Otimize sua produtividade,<br>  
            <strong class="app__title-strong">mergulhe no que importa.</strong>
            `
            
            break;
        case "descanso-curto":
            titulo.innerHTML = `
            Que tal dar uma respirada?<br> 
            <strong class="app__title-strong"> Faça uma pausa Curta</strong>
            ` 
            break;

        case "descanso-longo":
            titulo.innerHTML = `
            Hora de voltar à superfície.
             <strong class="app__title-strong"> Faça uma pausa longa</strong>
            `
        default:
            break;
    }
}

function botao(botaoAcao, contexto) {
    botaoAcao.addEventListener('click', () =>{
        alterarContexto(contexto);
    })
}

botao(focoBt, 'foco');
botao(curtoBt, 'descanso-curto');
botao(longoBt, 'descanso-longo');
2 respostas

Oi, Alexandre. Tudo bem?

O que está acontecendo, é que quando você clica em algum botão, é executado duas funções no seu código:

  1. A primeira é a do addEventListener:
    • Ela executa a função alterarContexto.
    • alterarContexto por sua vez remove a classe active.
    • E por fim adiciona a classe active no botão que foi clicado.
  2. Depois a função botao:
    • Porém quando ela executa a função alterarContexto, não adiciona a classe active como a primeira função faz.
    • Então ela remove a classe active que foi adicionada pelo primeiro addEventListener.

Comentar ou remover o trecho de código abaixo deve solucionar o problema:

function botao(botaoAcao, contexto) {
    botaoAcao.addEventListener('click', () => {
        alterarContexto(contexto);
    });
}

botao(focoBt, 'foco');
botao(curtoBt, 'descanso-curto');
botao(longoBt, 'descanso-longo');

Espero ter ajudado!

Siga firme nos seus estudos e conte com o fórum sempre que precisar!

Abraços :)

Caso este post tenha lhe ajudado, por favor, marcar como solucionado

Obrigado, deu certo.