最近,我开始看到一些项目管理应用程序在任务上提供了一个计时器函数/按钮。
用户可以单击以启动计时器,它将记录经过的时间并保存到该任务记录的后端。
我从未尝试将此功能添加到我目前正在构建的项目管理应用中的主要原因是,一旦用户浏览到应用程序或web中的另一个页面,JavaScript计时器就会变得毫无用处!
我看到一些应用程序解决这个问题的方法之一是使用AJAX加载应用程序中的每个页面,这样它们就可以在屏幕底部设置一个计时器栏,即使在PM应用程序中导航时,它也会保持在屏幕上。
这似乎是一个不错的方法,但在我的情况下,我不能这样做。我的项目管理应用程序是一个SugarCRM模块,所以我不能改变主应用程序流的工作方式。
所以我的问题是,在PM应用程序中实现任务计时器的可靠方法是什么?
我假设它可能必须与PHP一起工作,才能在前端JavaScript定时器和后端之间保持某种程度的同步。
例如,假设您在一个任务上运行了几分钟的计时器,然后从应用程序中导航。1小时后加载PM应用程序,如果JavaScript计时器使用后端启动计时器时间并计算经过的时间,然后让JavaScript计时器从如果您在应用程序中停留了整整一个小时的位置开始,那就太好了!
澄清:
00:03:00
01:03:00
并根据该值进行计数。这听起来可行吗?
发布于 2015-06-26 22:19:21
是的,这是可行的,不要依赖客户。您需要将启动时间保存到db,并同时启动客户端计时器。只需在js中添加一个运行时签入,以查看启动时间,并进行计算。这样,如果有人刷新浏览器、失去网络连接或关闭计算机,都无关紧要。
客户端只做服务器要做的事情。
简略情景
第一步:客户端发布
第二步:客户端计时器
在单击事件上,在JS中本地启动计时器
第三步:添加运行时检查
如果用户刷新他们的浏览器或执行任何需要重新呈现页面的操作,您有两个选项。1.从服务器获取现有计时器的启动时间,并在客户机2中进行计算。
优点:我肯定不会为此使用本地存储,但您可以使用本地存储作为备份。
示例: JS运行>无网络检测>引用本地存储
为了以防万一,这里有一些伪代码,因为有很多方法可以做到这一点。假设getActiveTimers
执行了一个GET到一个端点,该端点返回带有所有活动定时器的JSON,并表示启动时间,startTimer
在客户机中进行计算。如前所述,您可以在服务器端完成服务器端的计算,以便客户端能够启动并提供所提供的时间。
var init = function() {
getActiveTimers(function(rsp) {
if (rsp.timers) {
startTimer(rsp.timers.startTime);
}
});
$('.js-timer').on('click', function() {
// do time stuff
});
};
init();
这里最大的外卖是,是的,,你可以这样做,它一直在做。我还建议您研究一下休息。祝你好运!
https://stackoverflow.com/questions/31082889
复制相似问题