Usamos cookies para medir audiência e melhorar sua experiência. Você pode aceitar ou recusar a qualquer momento. Veja sobre o iMasters.
Olá, eu estou montando um site de jogos, e preciso fazer o nível do usuário logado, para isso, eu pegaria os minutos que ele entrou em uma página, no caso a do jogo, e a cada 5 minutos, ele ganharia 1 ponto de experiência, e a experiência dele, ficaria armazenada no banco de dados. Mas eu já tentei de tudo, e não tenho a mínima ideia de como fazer isso, poderiam me ajudar? http://recriajogos.com.br
Então, eu tentei fazer isso, mas ñ consegui, eu achei um script que é meio que um cronometro, só que ele inicia clicando nos botões, como eu faria ele iniciar quando o usuário logado entrasse em determinada página, e parace quando ele saísse dessa página??
O script é esse:
<html>
<head>
<title>Cronometro</title>
<script>
function formatatempo(segs) {
//function por Augusto Claro
//augustoclaro1@hotmail.com
//www.seven3d.com.br
min = 0;
hr = 0;
/*
if hr < 10 then hr = "0"&hr
if min < 10 then min = "0"&min
if segs < 10 then segs = "0"&segs
*/
while(segs>=60) {
if (segs >=60) {
segs = segs-60;
min = min+1;
}
}
while(min>=60) {
if (min >=60) {
min = min-60;
hr = hr+1;
}
}
if (hr < 10) {hr = "0"+hr}
if (min < 10) {min = "0"+min}
if (segs < 10) {segs = "0"+segs}
fin = hr+":"+min+":"+segs
return fin;
}
var segundos = 0; //inicio do cronometro
function conta() {
segundos++;
document.getElementById("counter").innerHTML = formatatempo(segundos);
}
function inicia(){
interval = setInterval("conta();",1000);
}
function para(){
clearInterval(interval);
}
function zera(){
clearInterval(interval);
segundos = 0;
document.getElementById("counter").innerHTML = formatatempo(segundos);
}
</script>
</head>
<body>
<span id="counter">00:00:00</span><br>
<input type="button" value="Parar" onclick="para();"> <input type="button" value="Iniciar" onclick="inicia();"> <input type="button" value="Zerar" onclick="zera();">
</body>
</html>Com JavaScript algo mais ou menos assim:
setInterval(function(){
$.ajax({
type: 'POST',
url: 'atualiza_pontos.php'
});
}, 50000);
O setInverval, como o proprio nome remete, executa um comando em determinado intervalo de tempo, neste caso, o 50000 aí é só você fazer o ajax chamar o arquivo que atualiza os pontos do usuário, bem simples.
>
Embora o setInterval seja uma solução interessante, ele pode causar travamentos (assim como um laço infinito) na página se o processo for muito longo pois ele é executado na mesma camada do documento.
Se o setInterval atender a sua necessidate, legal, mantenha. Caso precise de algo mais eficiente, veja a API Web Worker do HTML 5.
W3Schools: "Um web worker é um JavaScript que é executado em segundo plano, independentemente de outros scripts, sem afetar o desempenho da página. Você pode continuar a fazer o que quiser: clicar, selecionar as coisas, etc., enquanto o web worker é executado em segundo plano."
Tem um exemplo de cronometro de segundos usando esta API, com código bem curto e simples, no W3Schools; http://www.w3schools.com/html/tryit.asp?filename=tryhtml5_webworker
Oi, eu usei o api que você passou, e tentei ajeitar para o que preciso, ficou assim:
<!DOCTYPE html>
<html>
<body onload= "startWorker()"
window.onbeforeunload = "stopWorker()">
<p>Count numbers: <output id="result"></output></p>
<p><strong>Note:</strong> Internet Explorer 9 and earlier versions do not support Web Workers.</p>
<script>
var w;
function startWorker() {
if(typeof(Worker) !== "undefined") {
if(typeof(w) == "undefined") {
w = new Worker("demo_workers.js");
}
w.onmessage = function(event) {
document.getElementById("result").innerHTML = event.data;
};
} else {
document.getElementById("result").innerHTML = "Sorry, your browser does not support Web Workers...";
}
}
function stopWorker() {
w.terminate();
w = undefined;
}
</script>
</body>
</html>
Naquela página de teste, quando clico em "run", funciona, mas no php, ele ñ funciona... dando uma olhada, percebi que ñ possuo o arquivo demo_workers.js, onde posso baixa-lo?
O conteúdo do demo-worker.js está na página do W3 sobre web worker html5.
var i = 0;
function timedCount() {
i = i + 1;
postMessage(i);
setTimeout("timedCount()",1000);
}
timedCount();
Fonte: [https://www.w3schools.com/html/html5_webworkers.asp](https://www.w3schools.com/html/html5_webworkers.asp)
Faz uma contagem com sessão, pega o tempo atual e a cada tempo você vai acrescentando os pontos.