Default.aspx的
<asp:ScriptManager ID="ScriptManager1" runat="server">
</asp:ScriptManager>
<asp:UpdatePanel ID="UpdatePanel1" runat="server">
<ContentTemplate>
<asp:Label ID="Label1" runat="server">2:00:00</asp:Label>
<asp:Timer ID="Timer1" runat="server" Interval="1000" OnTick="Timer1_Tick">
</asp:Timer>
</ContentTemplate>
</asp:UpdatePanel>
Default.aspx.vb
Dim timer, timer_arr() As String
timer = Label1.Text
timer_arr = timer.Split(":")
Dim seconds = Integer.Parse(timer_arr(2))
Dim minutes = Integer.Parse(timer_arr(1))
Dim hours = Integer.Parse(timer_arr(0))
If seconds = 0 And minutes = 0 And hours = 0 Then
Timer1.Enabled = False
Else
seconds = seconds - 1
End If
If (seconds < 0) Then
seconds = 59
minutes = minutes - 1
End If
If minutes < 0 Then
minutes = 59
hours = hours - 1
End If
Label1.Text = hours & ":" & minutes & ":" & seconds
上面的代码显示了预期的结果,我的意思是,我需要倒计时器,它会向客户端显示倒数计时器,如2:45:34
。但问题是秒的值减少了两倍。我的意思是在下一秒2:45:34
之后,而不是显示2:45:33
,它会显示2:45:32
,依此类推。我很困惑,从我的观点来看,一切都很好。需要帮忙 !!
已更新
我相信,客户端脚本即javascript将是另一种选择,但我需要在线考试系统的计时器,这意味着只要客户端将请求发送到服务器,计时器就应该继续滴答。但是,如果我将使用javascript,那么计时器值将被中断并将显示意外值,即可能再次初始化,以及其他原因。所以,我相信服务器端脚本将是最好的。如果有人有其他建议,那么我将不胜感激。 !
答案 0 :(得分:0)
为什么不使用TimeSpan对象?
Dim ts as new TimeSpan(Integer.Parse(timer_arr(0)),Integer.Parse(timer_arr(1)),Integer.Parse(timer_arr(2)))
dim oneSecond as new TimeSpan(0,0,1) ' hours,min,sec
ts=ts.Subtract(oneSecond)
Label1.Text=ts.ToString("hh:mm:ss")
我没有测试过,但应该很棒
答案 1 :(得分:0)
这可以(也可能应该)使用javascript完成,但是如果你需要使用服务器端代码,那么我首先建议你将间隔减少到半秒而不是一整秒,以适应某些延迟服务器和客户端机器。其次,我要确保来回发送的页面的唯一部分是计时器标签本身,以使数据包尽可能小地传递。代码本身看起来不会超过几毫秒所以我认为你看到2秒跳跃的原因主要是因为定时器间隔。
如上所述,您可以将字符串解析为日期时间变量,然后使用addseconds函数减去秒(通过传入-1)而不是分割字符串并手动操作每个字段。我比datepans更熟悉datetime对象,但它真的是个人偏好。如果您使用日期时间对象,则需要根据您要查找的格式调用.toshorttimestring
或.tolongtimestring
。
答案 2 :(得分:0)
我知道,分享这个问题的答案为时已晚,因为我找到了这个解决方案而且我觉得,其他人可以从我的解决方案中获益。
这就是我所做的......
<asp:UpdatePanel ID="UpdatePanel1" runat="server">
<ContentTemplate>
<asp:Label ID="questionText" runat="server"></asp:Label>
<asp:HiddenField ID="txt_timer" Value="00:30:00" runat="server" />
<asp:Timer ID="Timer1" runat="server" Interval="1830" OnTick="Timer1_Tick"></asp:Timer>
</ContentTemplate>
</asp:UpdatePanel>
我使用了hiddenfield,它不断更新计时器,现在,我正在使用<div>
我正在显示计数器
<div id="counter" style="position: absolute; top: 165px; left: 850px;"></div>
现在我将我的javascript和css代码添加到我的文件中,以便更好地了解倒计时器
<强> timer.js 强>
<script src="../ajax/jquery.min.js" type="text/javascript" charset="utf-8"></script>
<script src="../js/jquery.countdown.js" type="text/javascript" charset="utf-8"></script>
<script type="text/javascript">
$(function(){
$('#counter').countdown({
image: '../images/digits.png',
startTime: document.getElementById('<%= txt_timer.ClientID %>').value,
// timerEnd: function(){ //alert('end!'); },
});
});
</script>
<强> timer.CSS 强>
<style type="text/css">
.cntSeparator
{
font-size: 55px;
margin: 5px 2px;
color: #000;
}
</style>
您可以看到倒数计时器here
的演示