>  기사  >  웹 프론트엔드  >  Javascript 동기화 서버 시간 및 동기화 카운트다운 Tips_javascript 기술

Javascript 동기화 서버 시간 및 동기화 카운트다운 Tips_javascript 기술

WBOY
WBOY원래의
2016-05-16 15:38:042605검색

어떤 사람이 인터넷에서 서버 시간을 페이지에 동기적으로 표시하는 방법을 묻는 것을 봤습니다. 실제로 이를 달성하는 방법에는 여러 가지가 있습니다. 대부분의 사람들은 Ajax를 사용하여 매초마다 서버를 요청할 수 있다고 즉시 생각할 수 있습니다. 그런 다음 서버에서 시간을 가져옵니다. 이는 달성할 수 있지만 큰 문제가 있습니다. 즉, 1초마다 서버를 요청하므로 사용자가 너무 많으면 서버가 충돌합니다(메모리 사용량). 매우 클 것임), 그래서 제 경우에는 이 방법이 적합하지 않은 것 같습니다. 여기서는 서버 리소스를 너무 많이 차지하지 않고 서버 시간과 카운트다운을 동기화할 수 있는 솔루션을 아래에 구현 아이디어를 작성하겠습니다. :

첫 번째 단계 사용자가 페이지를 처음 탐색하면 서버는 먼저 현재 시간을 얻어서 페이지에 표시합니다(예: ID와 함께 타임박스 범위에 표시).

두 번째 단계, 1초마다 계산할 새로운 시간을 설정합니다. (새로운 시간은 서버 시간을 초기값으로 사용하며, 1초마다 1초를 누적하여 새로운 시간을 생성합니다.)

세 번째 단계, 두 번째 단계에서 계산된 시간을 표시

아주 간단하지 않나요? 한 문장으로 요약할 수 있습니다. 서버 시간을 초기값으로 취하고 자동으로 1초를 ​​추가하여 매초마다 페이지에 새로운 시간을 생성합니다. 서버 시간이며 오류는 기본적으로 몇 초 안에 구현된 코드를 살펴보겠습니다.

<span id="timebox">11:21:55</span> //第一次将服务器时间显示在这里

<script type="text/javascript">

  $(function () {

    var oTime = $("#timebox");

    var ts = oTime.text().split(":", 3);

    var tnums = [parseInt(ts[0]), parseInt(ts[1]), parseInt(ts[2])];

    setInterval(function () {

      tnums = getNextTimeNumber(tnums[0], tnums[1], tnums[2]);

      showNewTime(tnums[0], tnums[1], tnums[2]);

    }, 1000);

    function showNewTime(h, m, s) {

      var timeStr = ("0" + h.toString()).substr(-2) + ":"

              + ("0" + m.toString()).substr(-2) + ":"

              + ("0" + s.toString()).substr(-2);

      oTime.text(timeStr);

    }

    function getNextTimeNumber(h, m, s) {

      if (++s == 60) {

        s = 0;

      }

      if (s == 0) {

        if (++m == 60) {

          m = 0;

        }

      }

      if (m == 0) {

        if (++h == 24) {

          h = 0;

        }

      }

      return [h, m, s];

    }

  });

</script>

코드는 매우 간단해서 여기서는 설명하지 않겠습니다. (위에서는 시, 분, 초만 표시합니다. 날짜도 추가할 수 있습니다. h==0이면 날짜를 직접 가져오거나 시간을 완성할 수 있습니다. , 시간 교정으로) 이해가 안 되시면 아래에 댓글을 달아주시면 제 시간에 답변해 드리겠습니다. 그런 다음 이 아이디어에 따라 동기화된 카운트다운을 구현하겠습니다. 플래시 세일과 유사하며 종료 시간을 설정한 다음 현재 시간과 종료 시간 사이의 간격을 계산하고 다른 컴퓨터와 브라우저에 표시되는 카운트다운 시간이 동일한지 확인해야 합니다. 다음과 같습니다:

<!DOCTYPE html>

<html>

<head>

  <title>同步倒计时</title>

  <script type="text/javascript" src="jquery-1.4.4.min.js"></script>

</head>

<body>

  <span id="timebox">1天00时00分12秒</span> <!--假设:1天00时00分12秒是从服务器获取的倒计时数据-->

  <script type="text/javascript">

    $(function () {

      var tid = setInterval(function () {

        var oTimebox = $("#timebox");

        var syTime = oTimebox.text();

        var totalSec = getTotalSecond(syTime) - 1;

        if (totalSec >= 0) {

          oTimebox.text(getNewSyTime(totalSec));

        } else {

          clearInterval(tid);

        }

      }, 1000);

      //根据剩余时间字符串计算出总秒数

      function getTotalSecond(timestr) {

        var reg = /\d+/g;

        var timenums = new Array();

        while ((r = reg.exec(timestr)) != null) {

          timenums.push(parseInt(r));

        }

        var second = 0, i = 0;

        if (timenums.length == 4) {

          second += timenums[0] * 24 * 3600;

          i = 1;

        }

        second += timenums[i] * 3600 + timenums[++i] * 60 + timenums[++i];

        return second;

      }

      //根据剩余秒数生成时间格式

      function getNewSyTime(sec) {

        var s = sec % 60;

        sec = (sec - s) / 60; //min

        var m = sec % 60;

        sec = (sec - m) / 60; //hour

        var h = sec % 24;

        var d = (sec - h) / 24;//day

        var syTimeStr = "";

        if (d > 0) {

          syTimeStr += d.toString() + "天";

        }

        syTimeStr += ("0" + h.toString()).substr(-2) + "时"

              + ("0" + m.toString()).substr(-2) + "分"

              + ("0" + s.toString()).substr(-2) + "秒";

        return syTimeStr;

      }

    });

  </script>

</body>

</html>

카운트다운의 정확성을 보장하기 위해 먼저 카운트다운 시간 간격을 초 단위로 계산한 다음 1초를 뺀 다음 시간 형식을 다시 생성했습니다. 물론 위의 시간 동기화 예시를 따라 직접 줄일 수도 있습니다. 시간이 많이 있습니다. 내 방법이 최고가 아닐 수도 있습니다. 모두가 소통할 수 있습니다. 감사합니다!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.