如何使用vb在asp.net中实现倒计时器

时间:2012-07-25 19:46:53

标签: asp.net vb.net timer countdown

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,那么计时器值将被中断并将显示意外值,即可能再次初始化,以及其他原因。所以,我相信服务器端脚本将是最好的。如果有人有其他建议,那么我将不胜感激。 !

3 个答案:

答案 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

的演示