Я хочу отобразить время просмотра пользователя, но когда я его обнов, он снова начнется с 0: 0: 0. Как он может справиться?
<?php $total_mints=($live_match['match_name']) * (60); ?> <script language="javascript"> display_c(<?=$total_mints?>,'ct'); </script> <script type="text/javascript"> function display_c(start,div){ window.start = parseFloat(start); var end = 0 // change this to stop the counter at a higher value var refresh=1000; // Refresh rate in milli seconds if(window.start >= end ){ mytime=setTimeout("display_ct('"+div+"')",refresh) } else {alert("Time Over ");} </script>
Как только время закончится, вы можете установить cookie в «Time Expired» … Когда страница загружена, если файл cookie «Time Expired», вы можете отобразить предупреждение «Time Over». Вы также можете использовать файл cookie для отслеживания накопленного времени просмотра.
Изменить – добавлены некоторые особенности … но я думаю, вам придется подумать об этом еще немного.
В принципе, вы хотите использовать JS для записи cookie, поскольку пользователь использует эту страницу, и вы хотите использовать PHP для чтения файла cookie при загрузке страницы. Вы можете использовать cookie для отслеживания только времени, общего накопленного времени или того и другого. Я думаю, вы хотите обновить cookie каждую минуту или около того?
Это будет выглядеть как ЧТО-ТО – этот код просто показывает, как отслеживать, прошло ли время или нет с файлом cookie, а не накопленным временем.
<?php $total_mints=($live_match['match_name']) * (60); // check for cookie and only proceed if it is not expired // can also use cookie to keep track of total accumulated number // of minutes between session if ($_COOKIE["yourMints"] != "expired") { ?> <script language="text/javascript"> display_c(<?php echo $total_mints; ?>,'ct'); </script> <script type="text/javascript"> function display_c(start,div) { window.start = parseFloat(start); var end = 0 // change this to stop the counter at a higher value var refresh=1000; // Refresh rate in milli seconds if(window.start >= end ) { mytime=setTimeout("display_ct('"+div+"')",refresh) } else { alert("Time Over "); // set cookie to expired document.cookie = "yourMints=expired"; } } </script> <?php } else // What follows is what happens if cookies IS expired { ?> <script type="text/javascript"> alert("Time Over "); </script> <?php } ?>
Вот хороший учебник JS cookie: http://www.quirksmode.org/js/cookies.html
Здесь используется $ _COOKIE для чтения файлов cookie с PHP http://php.net/manual/en/reserved.variables.cookies.php
EDIT: добавлен в примере JQuery после просмотра примера PlagueEditor.
Хороший скрипт PlagueEditor. Думал, я попробую то же самое с JQuery для удовольствия.
У JQuery есть простой маленький плагин для файлов cookie … всего 40 строк кода или около того. Вот страница с сохраненным таймером cookie и таймаутом 10 секунд с возможным сбросом:
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> <html> <head> <title>Time Spent on Page</title> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> <script type="text/javascript" src="PATH-TO-YOUR-JQ-DIRECTORY/jquery-1.4.2.min.js"></script> <script type="text/javascript" src="PATH-TO-YOUR-JQ-DIRECTORY/cookie.js"></script> <script type="text/javascript"> <!-- $.myTimer = { timeLimit: 10, displayTime: function () { if ($.myTimer.time < $.myTimer.timeLimit) { $("#timeHere").html($.myTimer.time); $.cookie('yourMints', $.myTimer.time, { expires: 7}); ++$.myTimer.time; $.myTimer.toggle = setTimeout("$.myTimer.displayTime()",1000); } else { $("#page").html('<h1>Time expired</h1>'); } } } // When the page is ready ================================================== $(document).ready(function() { // Read time spent on page cookie. Set it, if it doesn't exist. if (!$.cookie('yourMints')) { $.cookie('yourMints', '0', { expires: 7}); } $.myTimer.time = $.cookie('yourMints'); // Start timeer $.myTimer.displayTime(); // Reset the timer $("#reset").click( function() { $.cookie('yourMints', '0'); window.location.reload(); }); }); // --> </script> </head> <body> <div id="page"> <h2>Your total time here: <span id="timeHere"></span></h2> You can only look at this page for 10 seconds. </div> <input id="reset" type="button" value="Reset Timer" /> </body> </html>
Ниже приведено решение для отслеживания времени просмотра, даже при освежении. Он получает дату, когда страница загружается, и каждая секунда вычитает эту дату с указанной даты. Затем дата отображается в промежутке. Страница должна работать сама по себе. Надеюсь, это то, что вы искали, или, по крайней мере, помогает. Две функции были примерами W3Schools *.
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> <html> <head> <title></title> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> </head> <body> <script type="text/javascript"> /** * getCookie and setCookie were taken from http://www.w3schools.com/JS/js_cookies.asp. */ function getCookie(c_name) { if (document.cookie.length>0) { c_start=document.cookie.indexOf(c_name + "="); if (c_start!=-1) { c_start=c_start + c_name.length+1; c_end=document.cookie.indexOf(";",c_start); if (c_end==-1) c_end=document.cookie.length; return unescape(document.cookie.substring(c_start,c_end)); } } return ""; } function setCookie(c_name,value,expiredays) { var exdate=new Date(); exdate.setDate(exdate.getDate()+expiredays); document.cookie=c_name+ "=" +escape(value)+ ((expiredays==null) ? "" : ";expires="+exdate.toUTCString()); } var totalTime=0; var storedTime=getCookie("storedTime"); if(storedTime.length == 0){ //If it doesn't exist.. storedTime=0; }else{ storedTime=parseInt(storedTime); totalTime=storedTime; } function updateTime(){ totalTime+=1000; document.getElementById("duration").innerHTML= Math.ceil(totalTime / 1000); } onbeforeunload = function(){ setCookie("storedTime",totalTime,3); } setInterval(updateTime, 1000); </script> Your total time here: <span id="duration"><script type="text/javascript">document.write( Math.ceil(totalTime / 1000));</script></span> seconds... </body> </html>