【问题标题】:Countdown Timer in PHP restartsPHP中的倒数计时器重新启动
【发布时间】:2019-10-30 11:21:11
【问题描述】:

我正在php-mysql项目中使用javascript编写倒数计时器,倒数计时器工作正常,但问题是当用户与游戏交互时,计时器重新启动。我应该对 php 会话做些什么吗?

有什么想法吗?

     <div>Time left = <span id="timer"></span></div>
     <script>
       document.getElementById('timer').innerHTML = 01 + ":" + 00;
       startTimer();

       function startTimer() {
         var presentTime = document.getElementById('timer').innerHTML;
         var timeArray = presentTime.split(/[:]+/);
         var m = timeArray[0];
         var s = checkSecond((timeArray[1] - 1));
         if(s==59){m=m-1}
         if(m<0){alert('You lose,click reset')}                      
         document.getElementById('timer').innerHTML =m + ":" + s;
         setTimeout(startTimer, 1000);
       }

       function checkSecond(sec) {
       if (sec < 10 && sec >= 0) {sec = "0" + sec}; // add zero in front 
       of numbers < 10
       if (sec < 0) {sec = "59"};
       return sec;
       }
     </script>

【问题讨论】:

  • 您所说的“当用户在屏幕上做某事时计时器重新启动”是什么意思?
  • 这是一个刽子手游戏,当用户点击一个字母来猜测一个单词时,计时器会重新启动。
  • 我猜你是检测到一个字母被击中,然后刷新整个页面?
  • 是的,我在游戏中使用了会话,我可以在 js 代码中添加 php 会话吗?
  • 我明白了。对此没有超级简单的解决方案。您应该避免重新加载整个页面,以便 javascript 计时器可以继续运行,或者您必须将计时器信息连同被击中的键一起发送到 PHP,以将计时器设置为正确的初始时间。我会选择第一种方法。研究一种通常用于此的称为“AJAX”的技术。

标签: javascript php session timer


【解决方案1】:

根据您对主要问题的 cmet,您可以通过多种方式“陪审团”,但我不完全确定它是否适合您。

当用户第一次启动游戏并使用 php 操作重定向他们时,我猜这会启动初始计时器,随后与游戏的交互也会重置计时器。

您可以启动一个 php 会话并将游戏的开始时间保存到一个 php 会话变量中。然后当页面再次加载时,检查会话/变量是否存在,如果设置了,那么我们会做任何你需要的事情,因为当前时间和游戏开始时间之间的差异会告诉你如何游戏已经进行了很长时间。

您可以通过以下方式将变量从 php 传递给 JS:

let js_start_time_variable = "<?=php_start_time_variable?>";

这个解决方案并不漂亮。我建议使用 vuejs 之类的东西将整个游戏保存在一个页面应用程序中,而不使用 php 的页面刷新。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-12-08
    • 1970-01-01
    • 2015-12-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多