Ir ao conteúdo

Javascript como eu poderia fazer uma notificação(efeito sonoro) de 2 em 2 hrs ?


Ir à solução Resolvido por Adriano_web,

Posts recomendados

Postado

Eu fiz um sistema que controla a quantidade de agua que uma pessoa bêbe(com historico de quantidade e horario)! com isso, eu queria fazer uma notificação(efeito sonoro) para o usuario beber água de 2 em 2 horas!

 

<!DOCTYPE html>
<html lang="pt-br">
<head>
	<title></title>
	<meta charset="utf-8">
	<meta name="viewport" content="width=device-width, initial-scale=1" >
	<!---<link rel="stylesheet" type="text/css" href="http://localhost/beber-agua/css/index.css">--->
</head>
<body>
	<div id="menu">
					<div id="logo">
						<h1>Beber água</h1>
						<img class="a" src="/beber-agua/imgs/logo.png">
					</div>
				<ul>
					<li><a class="tempo">Tempo 00:00:00 Data: 00/0</a></li>
				</ul>
			</div>
		<div id="home">
			<h2>Estatísticas</h2>
				<div id="meta">
					<p class="name-p">Meta</p>
					<p class="media-meta">0</p><p class="media-fixa">/2000ML</p>
					<div class="barra"></div>
					<div class="barra-meta"></div>
				</div>
					<h2>Histórico</h2>
				<div id="historico-corpo">
				<!---<div class='historicoInfoBox'>
					<img src='/beber-agua/imgs/logo.png'>
					<p class='horario'>11:45</p>
					<p class='histQuant'>250ML</p>
				</div>--->
			</div>
			</div>
			
				<div class="add_agua">
					<h2>Beber Água</h2>
					<p>Bebi: <input type="number" class="ml" name="ml" maxlength="40"> ML</p>
					<input type="submit" class="btn-btn" onclick="js()" name="btn" value="Adicionar" >
					<input type="submit" class="btn-btn" onclick="cancelar()" name="btn" value="Cancelar" ">
					<p class="msgErro"></p>
				</div>
				<div id="parabens">
					<h2 style="background: none; margin-top: 56px; " class="btn-parabens">Parabéns!<br> Você bebeu 2000ML!<br>Até amanhã!</h2>
					<input type="submit" class="btn-btn" onclick="resetar_parabens()" name="btn" value="Reset" id="botão">
					<input type="submit" class="btn-view" onclick="view()" name="btn" value="Ver">
				</div>
			<input type="submit" value="Add" onclick="add_remove()" class="add-btn">
			<input type="submit" value="Reset" onclick="resetCongrats()" class="resetBtn">
			<div id="add-agua">
				
			</div>


			<style type="text/css">
				/* COMPUTADOR >1024px */ 


		/*MENU*/
		body{
			background: #ecf9ff;
			margin: 0px;
			padding: 0px; 
		}

		#menu{
			background-color: #d0f4ff;
			width: 100%;
			height: 6em;
			border-bottom: 1.4px solid #bfbfbf;
			border-top: 0.5px solid #bfbfbf;

		}
		.a{
			padding: 0px;
			margin: 0px;
			right: 93%;
			margin: 4px -20px 0px 10px;
			transform: rotate(25deg);
			position: absolute;
			cursor: pointer;

		}
		.a:hover{
			transform: rotate(16deg);
			transition: all 0.500s;  
		}
		h1{
			padding: 1.8% 0% 0% 8%;
			margin: 0px;
			font-size: 3.5em;
			color: #00c4ff;
			font-family: monospace;
			float: left;
			letter-spacing: -2px;
			font-weight: 700;
			cursor: pointer;
		}
		h1:hover{
			color: #00a9dc;
			transition: all 0.500s; 
		}
		ul{
			float: right;
			padding: 2% 5% 0% 0%;
			margin: 0px; 

		}
		ul li{
			display: inline-block;
			margin: 0px 0% 0px 0px;
			padding: 10px;
			background-color: #bdeefd;
			border-radius: 15px; 
			transition: all 0.500s;

		}
		ul li:hover{
			background: #a0e2f7; 

		}
		ul li a:hover{
			transition: all 0.500s;
			color: #007396;
		}
		ul li a{
			padding: 0% 0% 0% 0%;
			text-decoration: none;
			font-size: 160%;
			color: #009ece;
			font-family: sans-serif;
			letter-spacing: 1px;
			font-weight: 600;
			cursor: pointer;

		}

		#home{
			background: #e1f6fb;
			width: 75%; 
			height: 27.5em;
			text-align: center;
			margin: 25px auto 0px auto;
			padding: 0px;
			border-radius: 10px;
			border: solid 1px #969696;
		}
		#home img{
			/*width: 190px;
			height: 190px;*/
			border-radius: 100%;
			margin: 30px 0px 0px 0px;
		}

		h2{
			font-size: 1.8em;
    		font-family: sans-serif;
    		color: #00c4ff;
    		margin: 0px 0px 0px 0px;
    		padding: 10px 0px 12px 0px;
    		background: #caf0fb;
    		border-radius: 9px;
    		text-align: center;
		}
		p{
			margin: 22px 0px 0px 0px;
			padding: 0px 0px 0px 0px;
			font-family: sans-serif;
			font-size: 111%;
			color: #00c4ff;
		}
		.res{
			transition: all 0.500s;
		}
		input{
			background: none;
		    width: 30%;
		    padding: 8px 3px 8px 3px;
		    margin: 21px 0px 0px 0px;
		    border-radius: 10px;
		    border: solid 2px #00c4ff;
		    color: #00c4ff;
		    font-size: 90%;
		    text-align: center;
		    font-family: sans-serif;
		    outline: none;
		    font-weight: 600;
		}
		.btn-btn{
			width: 26%;
		    border-radius: 10px;
		    padding: 10px 0px 10px 0px;
		    margin: 30px 0px 10px 0px;
		    font-size: 120%;
		    cursor: pointer;
		    background: #00adff;
			color: white;
		}
		.btn-btn:hover{
			background: none;
			border: solid 2px #00adff;
			color: #00adff;
			transition: all 0.500s;
		}
		.btn-view{
			width: 26%;
		    border-radius: 10px;
		    padding: 10px 0px 10px 0px;
		    margin: 30px 0px 10px 0px;
		    font-size: 120%;
		    cursor: pointer;
		    background: #00adff;
			color: white;
		}
		.btn-view:hover{
			background: none;
			border: solid 2px #00adff;
			color: #00adff;
			transition: all 0.500s;
		}
		#cfm1{
			color: red;
			margin: -26px 0px 0px 0px;
			padding: 0px 0px 0px 0px;

		}
		#cfm{
			color: green;
			margin: -26px 0px 0px 0px;
			padding: 0px 0px 0px 0px;

		}
		#meta{
			width: 73%;
			height: 14vh;
			border-radius: 20px;
			background: #bdeefd;
			margin: 30px auto 26px auto;
			z-index: 100;   
		}
		.barra{
			width: 48%;
    		height: 4vh;
    		border-radius: 6px;
			background: #f9f9f9;
			margin: 6px auto 0px auto;    
			position: absolute;
			right: 26%;
		}
		.barra-meta{
			width: 0.5%;
    		height: 4vh;
   			border-radius: 6px;
			background: #00adff;  
			margin: 6px auto 0px auto; 
			position: absolute;
			right: 26%;
		}
		.barra-meta:hover{
			background: #006494;
			transition: all 0.500s;
		}
		.media-meta{
			float: left;
    		padding: 0px;
    		margin: -19px 0px 0px 34px;
    		color: #0082bf;
    		transition: all 0.500s; 
		}
		.media-fixa{
			float: left;
    		padding: 0px;
    		margin: -19px 0px 0px 0px;
    		color: #0082bf;
    		transition: all 0.500s; 
		}
		.name-p{
			padding: 10px 0px 0px 0px;
			color: #0082bf;
		}
		.add-btn, .resetBtn{
			width: 80px;
			height: 80px;
			border-radius: 100%;
			padding: 5px;
			text-align: center;
			font-size: 1.5em;
			float: right;
			margin: -102px 66px 0px 0px;
			border: 2px solid #00adff;
			color: #00adff;
			cursor: pointer;
			position: fixed;
    		right: 0%;
		}
		.add-btn:hover,.resetBtn:hover{
			transition: all 0.500s;
			border: 2px solid #007bb5;
			color: #007bb5;
		}
		/*ADD AGUA*/

		.add_agua{
			width: 55%;
		    height: 20em;
		    border-radius: 9px;
		    background: #e1f6fb;
		    margin: -366px auto 0px auto; 
		    z-index: 1000;
		    position: relative;
		    text-align: center;
		    border: 1px solid #969696;
		}

		#parabens{
			width: 300px;
			height: 300px;
			border-radius: 16%;
			color: #00a9dc;
			border: 2px solid #00a9dc;
			text-align: center;
			margin: 0px;
			position: absolute;
			top: 31%;
    		left: 38%;
   			background: #e1f6fb;
   			transition: all 0.600s;

		}
		h2 .btn-parabens{
			background: none !Important;
			font-size: 2.4em;
			margin: 70px 0em 0em 0em !Important;
			font-family: monospace;
			padding: 0px 15px 0px 15px;
			width: 20%;
		}
		#parabens:hover{
			transition: all 0.500s;
			background: #b9f0fd;  
		}
		#historico-corpo{
			position: absolute;
			width: 75%;
		}
		.historico{
			width: 8%;
		    float: left;
		    padding: 0px;
		    border: 1px solid #969696;
		    /*position: absolute;
		    top: 53%;
		    right: 78%;*/
		    border-radius: 7%;
		    margin: 30px 0px 0px 10px;
		    display: block;
		}
		.historico:hover{
			box-shadow: 0px 3px 6px 0px #00b8ff;
			transition: all 0.300s;
			cursor: pointer;
		}
		.historico img{
			width: 95%;
			margin: 0px !Important;

			
		}
		.historico .horario{
			text-align: center;
			margin: 0px 0px 0px 0px;
			padding: 0px 0px 4px 0px;
    		font-weight: 600;	
    		font-size: 80%;
		}
		.histQuant{
			text-align: center;
			margin: 0px 0px 0px 0px !Important;
			padding: 0px 0px 4px 0px;
			font-size: 80%;
			padding: 1px;
    		font-weight: 600;
    		background: #caf0fb;
    		border-radius: 5px; 	
    		font-size: 100%;
    		color: #0082bf;
		}
			</style>

	<script type="text/javascript">

		// Tela de inicio - estatísticas
		var telaEstatisticas = document.querySelector('#home')
		// agua

		var boxAdicionarAgua = document.querySelector(".add_agua") // box para add agua
		var valorDaMedia = Number(0) // quantidade de agua
		var saidaAgua = document.querySelector('.media-meta') // saida do valor da quantidade de agua
		var progressoAgua = document.querySelector('.barra-meta')
		var exibirboxAdicionarAgua = document.querySelector('.add-btn'),
		resetVer = document.querySelector('.resetBtn')



		// Saida de mensagem de erro
		var msgErro = document.querySelector('.msgErro')

		// Histórico
		var idHistorico = document.querySelector('#historico-corpo')
		var histCorpo = document.querySelector('.hist')
		
		//Box parabens
		var boxCongrats = document.querySelector("#parabens")


		//Não exibir na tela
		boxAdicionarAgua.style.display = "none"
		boxCongrats.style.display = "none"
		resetVer.style.display = "none"


		// horario que entrou
		var HoraNotFicacao = 2
		var temp = new Date()
		var HoraQentrou = temp.getHours()
		var minQentrou = temp.getMinutes()

		
		//DATA atualizando
		function data() {
			var temp0 = document.querySelector('.tempo'),
			tempo = new Date,
			horas = tempo.getHours()
		 	var min = tempo.getMinutes(),
			seg = tempo.getSeconds(),
			dia = tempo.getDay()+8,
			mes = tempo.getMonth()+1,
			ano = tempo.getYear()
			temp0.innerHTML = `Tempo: ${horas}:${min}:${seg} Data: ${dia}/${mes}`

		} setInterval(data, 1000) // atualizar o horario a cada 1s
		function add_remove() {
			//aparecer/desaparecer
			telaEstatisticas.style.opacity = '0.3'
			boxAdicionarAgua.style.opacity = '1.0'
			boxAdicionarAgua.style.display = "block"
			exibirboxAdicionarAgua.style.display = 'none'
		}
		function cancelar() {
			telaEstatisticas.style.opacity = '1.0'
			boxAdicionarAgua.style.display = "none"
			exibirboxAdicionarAgua.style.display = 'block'
		}
		function resetar_parabens() {
			valorDaMedia = 0
			saidaAgua.innerHTML = "0"
			telaEstatisticas.style.opacity = '1'
			boxAdicionarAgua.style.display = 'none'
			boxCongrats.style.display = "none"
			progressoAgua.style.width = '0.5%'
			exibirboxAdicionarAgua.style.display = 'block'
			while(idHistorico.firstChild){
				idHistorico.removeChild(idHistorico.firstChild)
			}
			

		}
		function resetCongrats() {
			valorDaMedia = 0
			saidaAgua.innerHTML = "0"
			boxAdicionarAgua.style.display = 'none'
			progressoAgua.style.width = '0.5%'
			exibirboxAdicionarAgua.style.display = 'block'
			resetVer.style.display = "none"
			while(idHistorico.firstChild){
				idHistorico.removeChild(idHistorico.firstChild)
			}
			

		}
		function view() {
			boxCongrats.style.display = 'none'
			telaEstatisticas.style.opacity = '1'
			boxAdicionarAgua.style.display = 'none'
			boxCongrats.style.display = "none"
			exibirboxAdicionarAgua.style.display = 'none'
			resetVer.style.display = "block"
		}
		/*var rel = 0
		while(rel<2000){
			if(HoraQentrou==Number(HoraNotFicacao)+Number(horas)){
			}
		}*/

		/*var temp = new Date(),
		horas02 = temp.getHours()

		function Not() {
			var tempo = new Date(),
			horas = tempo.getHours()

			if (horas==horas02) {
				console.log('Notificação')
				
			}
		} setInterval(Not, 1000)*/


		function js() {
			var ml = document.querySelector('.ml') // Input para adicionar água
			if (!ml || ml.length == 0) {
				msgErro.innerHTML = "Ml inválido"
				event.preventDefault()
				return false
			}
			if (ml.value < 200 || ml.length < 0) {
				msgErro.innerHTML = `Minímo 200ML`
				event.preventDefault()
				return false
			}
			if (ml.value > 500) {
				msgErro.innerHTML = `Máximo 500ML`
				event.preventDefault()
				return false
			}
			else{
			msgErro.innerHTML = '' // Saida de erro ficar vazia
			exibirboxAdicionarAgua.style.display = 'block' // exibir o botão de add agua
			var rel = 0
			console.log()
			while(rel < Number(2000)){
				rel=rel+Number(ml.value)
				valorDaMedia = Number(valorDaMedia)+Number(rel)
				saidaAgua.innerHTML = `${valorDaMedia}`

				// historico
				var quant = Number(0)
				quant = Number(quant)+Number(ml.value)
						var temp0 = new Date()
						var Hh = temp0.getHours()
						var Mm = temp0.getMinutes()
					idHistorico.innerHTML += `<div class='historico'><img src='/beber-agua/imgs/logo.png'><p class='horario'>${Hh}:${Mm}</p><p class='histQuant'>${quant}ML</p></div>`

				boxAdicionarAgua.style.display = "none"
				telaEstatisticas.style.opacity = '1'
				if (Number(valorDaMedia)>249){
					//estilo: progresso e transição
					progressoAgua.style.width = "6%"
					progressoAgua.style.transition = "all 2s"

				}
				if (Number(valorDaMedia)>499){
					//estilo: progresso e transição
					progressoAgua.style.width = "13%"
					progressoAgua.style.transition = "all 2s"
				}
				if (Number(valorDaMedia)>749){
					//estilo: progresso e transição
					progressoAgua.style.width = "18%"
					progressoAgua.style.transition = "all 2s"
				}
				if (Number(valorDaMedia)>999){
					//estilo: progresso e transição
					progressoAgua.style.width = "24%"
					progressoAgua.style.transition = "all 2s"
				}
				if (Number(valorDaMedia)>1249){
					//estilo: progresso e transição
					progressoAgua.style.width = "31%"
					progressoAgua.style.transition = "all 2s"
				}
				if (Number(valorDaMedia)>1499){
					progressoAgua.style.width = "35%"
					progressoAgua.style.transition = "all 2s"
				}
				if (Number(valorDaMedia)>1749){
					//estilo: progresso e transição
					progressoAgua.style.width = "41%"
					progressoAgua.style.transition = "all 2s"
				}
				if(Number(valorDaMedia)>=2000){
					//estilo: progresso e transição e aparecer o congrats
					progressoAgua.style.width = "48%"
					progressoAgua.style.transition = "all 2s"
					telaEstatisticas.style.opacity = '0.2'
					boxCongrats.style.display = "block"
					exibirboxAdicionarAgua.style.display = 'none'
				}
				break
			}
		}
	}




			

	</script>


</body>
</html>

 

Deêm um ctrl+c  ctrl+v

Postado

Cara, não sei se você vai conseguir fazer isso sem que o usuário interaja com a página. Mas você pode colocar um botão "Ativar Lembrete" para rodar essa função aí, forçando o usuário clicar nele ou pode colocar dentro de alguma função em que o usuário interaja.

ativarLembrete = function(){
  setTimeout(function(){  
    var audio = new Audio('alerta.mp3');
    audio.addEventListener('canplaythrough', function() {
    audio.play();
    ativarLembrete();  
    });
  }, 7200000);
}

 

Já é um norte aí...

  • Obrigado 1
  • Solução
Postado

@Wagner Leandro Tem novas tecnologias como Funções Assíncronas(ES7) que são executadas a partir de um certo período. Você poderia usá-las em conjunto com funções com o window.setTimeout(). 

 

Sintaxe:

async function nome([param[, param[, ... param]]]) {
   instruções
}

 

Dê uma olhada MDN: 

https://developer.mozilla.org/pt-BR/docs/Web/JavaScript/Reference/Statements/funcoes_assincronas

  • Obrigado 1
Postado
3 horas atrás, Adriano_web disse:

@Wagner Leandro Tem novas tecnologias como Funções Assíncronas(ES7) que são executadas a partir de um certo período. Você poderia usá-las em conjunto com funções com o window.setTimeout(). 

 

Sintaxe:


async function nome([param[, param[, ... param]]]) {
   instruções
}

 

Dê uma olhada MDN: 

https://developer.mozilla.org/pt-BR/docs/Web/JavaScript/Reference/Statements/funcoes_assincronas

valeu ❤️

3 horas atrás, joseph_dev disse:

Cara, não sei se você vai conseguir fazer isso sem que o usuário interaja com a página. Mas você pode colocar um botão "Ativar Lembrete" para rodar essa função aí, forçando o usuário clicar nele ou pode colocar dentro de alguma função em que o usuário interaja.


ativarLembrete = function(){
  setTimeout(function(){  
    var audio = new Audio('alerta.mp3');
    audio.addEventListener('canplaythrough', function() {
    audio.play();
    ativarLembrete();  
    });
  }, 7200000);
}

 

Já é um norte aí...

❤️

Crie uma conta ou entre para comentar

Você precisa ser um usuário para fazer um comentário

Criar uma conta

Crie uma nova conta em nossa comunidade. É fácil!

Crie uma nova conta

Entrar

Já tem uma conta? Faça o login.

Entrar agora

Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas comunidades sobre tecnologia do Brasil. Leia mais

Direitos autorais

Não permitimos a cópia ou reprodução do conteúdo do nosso site, fórum, newsletters e redes sociais, mesmo citando-se a fonte. Leia mais

×
×
  • Criar novo...