我需要做一个考试系统 asp.net开发,从数据库中读取做题规定时间,然后用分和秒显示并倒计时,javascript怎么实现 敬请各位帮助!

解决方案 »

  1.   

    利用javascript的setTimeout方法制作倒计时器,时间到了强制提交
      

  2.   

    <script language="Javascript">var normalelapse = 100;
    var nextelapse = normalelapse;
    var counter; 
    var startTime;
    var start = clock.innerText; 
    var finish = "00:00:00:00";
    var timer = null;// 开始运行
    function run() {  counter = 0;
      // 初始化开始时间
      startTime = new Date().valueOf();  // nextelapse是定时时间, 初始时为100毫秒
      // 注意setInterval函数: 时间逝去nextelapse(毫秒)后, onTimer才开始执行
      timer = window.setInterval("onTimer()", nextelapse); 
    }// 停止运行
    function stop() {  window.clearTimeout(timer);
    }
    // 倒计时函数
    function onTimer()
    {if (start == finish)
    {
      window.clearInterval(timer);
      alert("考试时间已到,按确定键交卷");
      form1.submit();
    }var hms = new String(start).split(":");
    var ms = new Number(hms[3]);
    var s = new Number(hms[2]);
    var m = new Number(hms[1]);
    var h = new Number(hms[0]);
      
    ms -= 10;
    if (ms < 0)
    {
      ms = 90;
      s -= 1;
      if (s < 0)
      {
        s = 59;
        m -= 1;
      }
      
      if (m < 0)
      {
        m = 59;
        h -= 1;
      }
    }var ms = ms < 10 ? ("0" + ms) : ms;
    var ss = s < 10 ? ("0" + s) : s;
    var sm = m < 10 ? ("0" + m) : m;
    var sh = h < 10 ? ("0" + h) : h;start = sh + ":" + sm + ":" + ss + ":" + ms;
    clock.innerText = start;// 清除上一次的定时器
    window.clearInterval(timer);// 自校验系统时间得到时间差, 并由此得到下次所启动的新定时器的时间nextelapse
    counter++; 
    var counterSecs = counter * 100;
    var elapseSecs = new Date().valueOf() - startTime;
    var diffSecs = counterSecs - elapseSecs;
    nextelapse = normalelapse + diffSecs;
    //diff.value = counterSecs + "-" + elapseSecs + "=" + diffSecs;
    //next.value = "nextelapse = " + nextelapse;
    if (nextelapse < 0) nextelapse = 0;// 启动新的定时器
    timer = window.setInterval("onTimer()", nextelapse); 
    }
    run();
    </script>
    <span id="clock">00:33:00:00</span>
      

  3.   

    cs版本的做过,可以用timer控件实现。
      

  4.   

    var hms = new String(start).split(":");
    var ms = new Number(hms[3]);
    var s = new Number(hms[2]);
    var m = new Number(hms[1]);
    var h = new Number(hms[0]);
     
    ms -= 10;
    if (ms < 0)
    {
      ms = 90;
      s -= 1;
      if (s < 0)
      {
        s = 59;
        m -= 1;
      }
     
      if (m < 0)
      {
        m = 59;
        h -= 1;
      }
    }var ms = ms < 10 ? ("0" + ms) : ms;
    var ss = s < 10 ? ("0" + s) : s;
    var sm = m < 10 ? ("0" + m) : m;
    var sh = h < 10 ? ("0" + h) : h;start = sh + ":" + sm + ":" + ss + ":" + ms;
    clock.innerText = start; 在循环过程中 不要循环一次就连结一下数据库  这样的代码性能很不好!