1
resposta

Desafio: inserindo áudios no projeto.

Fiz o desafio dessa forma, testei de outras formas mas achei essa bacana. Nao consegui acessar o filho do botao para mudar apenas o texto, quando da o play o arrow some.

const html = document.querySelector('html');
const focoBt = document.querySelector('.app__card-button--foco');
const curtoBt = document.querySelector('.app__card-button--curto');
const longoBt = document.querySelector('.app__card-button--longo');
const banner = document.querySelector('.app__image');
const titulo = document.querySelector('.app__title');
const botoes = document.querySelectorAll('.app__card-button');
const startPauseBtn = document.querySelector('#start-pause');
const musicaFocoInput = document.querySelector('#alternar-musica')
const musicaTemporizadorPlay = new Audio('/sons/play.wav')
const musicaTemporizadorPause = new Audio('/sons/pause.mp3')
const audioTempoFinalizado = new Audio('./sons/beep.mp3')
const musicaFoco = new Audio('/sons/luna-rise-part-one.mp3')   //New audio e uma instancia do javaScript
musicaFoco.loop = true; //para musica ficar em loop
//readFile() serve pra pegar qualquer arquivo para colocar no projeto mas nao e recomendavel

let tempoDecorridosEmSegundos = 5;
let intervaloId = null;

musicaFocoInput.addEventListener('change', () => {
    if (musicaFoco.paused) {
        musicaFoco.play()
    } else {
        musicaFoco.pause()
    }
})

focoBt.addEventListener('click',  () => {
    alterarContexto('foco');
    focoBt.classList.add('active');
});

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? <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>`
            break;

        default:
            break;
    }
}

const contagemRegressiva = () => {
    if (tempoDecorridosEmSegundos <= 0 ) {
        audioTempoFinalizado.play()
        zerar();
        return
    }
    tempoDecorridosEmSegundos -= 1; //decrementar um valor usamos o -=
    console.log(tempoDecorridosEmSegundos);
}

startPauseBtn.addEventListener('click', iniciar);


function iniciar() {
    if (intervaloId) {
        zerar()
        return
    }
    intervaloId = setInterval(contagemRegressiva, 1000); //setInterval e um metodo que realiza a funcao em um determinado peridodo de tempo, ele recebe dois parametros 
    musicaTemporizadorPlay.play()
    startPauseBtn.innerText = 'Pausa';
}

function zerar() {
    clearInterval(intervaloId); //clearInterval pausa algum tipo de lop que esta decorrendo no codigo
    intervaloId = null; //e devolvendo o que a variavel estava recebendo
    musicaTemporizadorPause.play()
    startPauseBtn.innerText = 'Comecar';
}
1 resposta

Olá, Wesley!

Pelo que entendi, você está tentando acessar o elemento <span> dentro do botão para alterar apenas o texto, correto? Se o elemento <span> for filho direto do botão, você pode usar a propriedade children do botão para acessá-lo. Por exemplo, se o seu botão for algo como:

<button id="start-pause">
    <span>Texto</span>
</button>

Você pode acessar o <span> assim:

const startPauseBtn = document.querySelector('#start-pause');
const span = startPauseBtn.children[0]; // Acessando o primeiro filho do botão

Depois, você pode alterar o texto do <span> ao invés do botão:

span.innerText = 'Pausa';

E

span.innerText = 'Começar';

No seu código, você está alterando o texto do botão inteiro, o que pode estar fazendo com que o <span> desapareça. Tente fazer essa alteração e veja se resolve o seu problema!

Espero ter ajudado e bons estudos!