我正在开发一个asp.net项目,在这个项目中我使用了倒数计时器。我在jquery中写了倒数计时器。它工作得很好。另一方面,当我点击项目中的另一页时,打开倒计时页面。我的倒计时器不应该重启。它必须继续正确倒计时。我认为我用会话做,但会话有点慢。它不适合实时。我该如何处理这个问题?
答案 0 :(得分:1)
您可以将剩余时间存储在Cookie中。
这是一个简单的方法,因为一切都在客户端。但是,如果您需要更安全的东西,可以跟踪服务器端。
// public property on countdown page
public DateTime Countdown
{
get
{
if (Session["Countdown"] == null)
Session["Countdown"] = DateTime.Now;
return Session["Countdown"];
}
}
这个想法是,当用户第一次访问该页面时,会创建一个会话变量“倒计时”,其中包含当前日期和时间,随后对该页面的访问将检索该页面最初访问的日期和时间。您可以在页面上将其渲染为javascript变量,以便您的计时器可以确定剩余时间并从那里开始倒计时。
如果某个Timespan已经过了,你还需要为getter添加一些逻辑来重置会话变量。
答案 1 :(得分:0)
var Timer;
var TotalSec;
function CreateTimer(TimerID, Time) {
Timer = "#" + TimerID;
TotalSec = Time;
// $("mytimer").show("normal", UpdateTimer(TotalSec));
UpdateTimer(TotalSec)
window.setTimeout("Tick()", 1000);
}
function Tick() {
//var toto = Totalsec;
if (TotalSec <= 0) {
alert("Time is up")
jQuery('#btnSet').removeAttr("disabled");
// jQuery('#link').removeAttr("Enabled");
return;
}
TotalSec -= 1;
UpdateTimer()
window.setTimeout("Tick()", 1000);
}
function UpdateTimer() {
var Seconds = TotalSec;
var Days = Math.floor(Seconds / 86400);
Seconds -= Days * 86400;
var Hours = Math.floor(Seconds / 3600);
Seconds -= Hours * (3600);
var Minutes = Math.floor(Seconds / 60);
Seconds -= Minutes * (60);
var TimeStr = ((Days > 0) ? Days + " gün " : "") + LeadingZero(Hours) + ":" + LeadingZero(Minutes) + ":" + LeadingZero(Seconds)
// jQuery("" + Timer + "").text(TimeStr);
jQuery("#lbldene").text(TimeStr);
}
function LeadingZero(Time) {
return (Time < 10) ? "0" + Time : +Time;
}
$(document).ready(function() {
$.ajax({
type: "POST",
url: "GenericWCF.svc/Timer",
data: "{}",
contentType: "application/json; charset=utf-8",
dataType: "json",
success: function(msg){
CreateTimer('lbldene',msg.d);
}
});
});
我已经使用WCF服务来获取剩余时间,因此在页面加载计时器开始倒计时之后。但是,当单击应用程序中的新页面并返回计时器页面时。我的计时器重置我不想要它。我想继续倒计时