미스터핑크와 함께 자바스크립트 코어 DOM 및 BOM 연산의 카운트다운 효과를 배워보세요.

카운트다운 효과

사례 분석

① 이 카운트다운은 계속 바뀌기 때문에 타이머가 자동으로 바뀌어야 합니다(setInterval) 참고: Int의 I는 대문자 i이고 val의 l은 소문자 L입니다. 장황하게 말하겠습니다.
② 3개의 블랙박스에 시, 분, 초가 저장됩니다.
③ 블랙박스 3개는 innerHTML을 이용해 계산된 시, 분, 초를 넣는다.
④ 첫 번째 실행도 밀리초 간격이므로 새로 고침 직후 페이지가 비어 있습니다.
⑤ 처음에 페이지를 새로 고칠 때 공백 문제를 방지하기 위해 함수를 먼저 한 번 호출할 수 있도록 함수를 캡슐화하는 방법을 채택하는 것이 가장 좋습니다.
⑥ 카운트다운이 끝나면 과거 정보를 알려줍니다.
⑦ 최적화, 타이머 지우기clearInterval().
효과 다이어그램 실현:
여기에 이미지 설명 삽입

암호

기본 구조

<!DOCTYPE html>
<html lang="en">
  <head>
    <meta charset="UTF-8" />
    <meta http-equiv="X-UA-Compatible" content="IE=edge" />
    <meta name="viewport" content="width=device-width, initial-scale=1.0" />
    <title>12-倒计时效果</title>
    <style>
      div {
      
      
        margin: 200px;
      }
      div>span {
      
      
        display: inline-block;
        width: 40px;
        height: 40px;
        background-color: #333;
        font-size: 20px;
        color: #fff;
        text-align: center;
        line-height: 40px;
      }
      /* 倒计时已过小提示 先是隐藏的 */
      .tisp {
      
      
        display: none;
        position: absolute;
        top: 65px;
        left: 25%;
        width: 300px;
        color: red;
        background-color: skyblue;
        line-height: 40px;
        text-align: center;
        font-size: 14px;
      }
    </style>
  </head>
  <body>
    <div>
      <span class="hour">14</span>
      <span class="minute">59</span>
      <span class="second">14</span>
    </div>
    <span class="tisp">已过倒计时时间,下次尽早~</span>
  </body>
</html>

여기에 이미지 설명 삽입

새 날짜()

Date 개체
Date 개체는 날짜 및 시간 작업에 사용됩니다.
Date 객체 생성: new Date()
자세한 내용은 다음을 참조하십시오: Date - Javascript | MDN
JavaScript 코드 스니펫이 지겹기 때문에 이번에는 학습된 로드를 사용하여 본문 아래에서 수행합니다.

암호:

// 以下的js语句将都会被放入到function(){}内
// 也就是function(){这里面!}
window.addEventListener('load', function(){
    
    } )


카운트다운을 캡슐화하는 parseInt() 함수를 사용하여 정수를 얻
습니다. 전체적인 아름다움을 위해 특별히 삼항식을 사용하여 10 미만의 숫자에 0을 더합니다. 예
: h = h < 10 ? '0' + 시간 : 시간

암호:

window.addEventListener('load', function(){
    
    
// 
    var hour = document.querySelector('.hour')      // 时
    var minute = document.querySelector('.minute')  // 分
    var second = document.querySelector('.second')  // 秒
    // 设定目标时间格式:'YYYY-MM-DD HH:mm:ss'
    var inputDate = +new Date('2022-09-23 16:54:00')
    // 封装一个倒计时函数
    function countDown(){
    
    
    // 获取调用的时间戳
      var nowData = +new Date()
      // 目标时间 - 当前时间 / 1000 得到 剩余秒数
      times = (inputDate - nowData)/1000 
      // 转化成时钟
      var h = parseInt(times/60/60%24)
      // 为了整体美观给10以下的数字补0
      h = h < 10 ? '0' + h : h
      hour.innerHTML = h
      // 转化成分钟
      var m = parseInt(times/60%60)
      m = m < 10 ? '0' + m : m
      minute.innerHTML = m
      // 转化成秒钟
      var s = parseInt(times % 60)
      s = s < 10 ? '0' + s : s 
      second.innerHTML = s
        }
      })

이 시점에서 절반은 완료되었지만 실행 중 한 번만 실행되므로 타이머를 사용해야 합니다.

타이머 - setInterval()

윈도우에는 2개의 타이머 메소드가 있으며 호출시 윈도우를 생략할 수 있으며 지연 시간 단위는 밀리초 1000밀리초 = 1초로 생략 가능하며 생략하면 기본값은 0이다.
setTimeout(실행 함수, 지연 시간)
한 번만 실행하려면 setTimeout
②를 선택할 수 있습니다.setInterval(실행함수, 지연시간)
계속해서 함수를 호출하고 싶다면 setInterval을 선택하면 됩니다.
카운트다운 함수를 계속 호출해야 하므로setInterval카운트다운 효과를 얻으려면

암호:

// 开启定时器
// 给定时器加标识符(名字)方便后续调用
var timer = setInterval(countDown,1000)

여기에 이미지 설명 삽입설정한 목표 시간은 2022-09-23 17:50:00 현재 시간 기준으로 아직 1~2분 정도 남았습니다. 우리는 그것을 달성했습니다! 그러나 신중한 친구들은 달리기를 시작하거나 카운트다운 효과를 새로고침할 때 짧은 일시 중지가 있음을 발견했습니다.

문제의 예시 이미지:

여기에 이미지 설명 삽입
이 문제는 첫 번째 실행도 밀리초 간격이기 때문에 새로고침 직후 페이지가 비어 있기 때문입니다. 해결 방법은 타이머를 시작하기 전에 카운트다운 기능을 한 번 호출하는 것입니다.

// 加载页面时就调用一次防止有空白
countDown()

카운트다운이 만료되었습니다

카운트다운 효과만 구현해서는 안 됩니다. 사용자에게 더 나은 경험을 제공하기 위해 다른 프롬프트를 추가할 수 있습니다.

샘플 코드:

// times是剩余的秒数
// 如果秒数小于0 即为已过倒计时时间,则隐藏时间,显示提示语
// 需要先去获取时间的div元素和提示的div元素
// 此代码片放置在倒计时函数countDown()的最后
if (times < 0) {
    
    
  div.style.display = 'none'
  tisp.style.display = 'block'
  // 此处还有一句
  } else {
    
    
  div.style.display = 'block'
  tisp.style.display = 'none'
}

예시 렌더링:
여기에 이미지 설명 삽입

지우기 타이머 최적화 - clearInterval()

앞에서 setInterval() 타이머가 계속 호출된다고 했는데 시간이 다 되면 쉬는 건가요? 아니요, 계속 전화를 겁니다.
위 사진!
여기에 이미지 설명 삽입시간이 지났는데도 타이머가 계속 울리고 있으니 이 시간에는 타이머를 지워야 합니다.clearInterval()
이전에 타이머에 추가한 이름이 여기서도 유용합니다.

샘플 코드:

// 此js代码片放置在判断剩余秒数是小于0内
clearInterval(timer)

코드 예제 다이어그램:
여기에 이미지 설명 삽입
다이어그램을 보면 클리어 타이머가 성공적입니다. 카운트다운이 경과하면 타이머가 더 이상 호출되지 않습니다.

전체 코드

<!DOCTYPE html>
<html lang="en">
  <head>
    <meta charset="UTF-8" />
    <meta http-equiv="X-UA-Compatible" content="IE=edge" />
    <meta name="viewport" content="width=device-width, initial-scale=1.0" />
    <title>12-倒计时效果</title>
    <style>
      div {
      
      
        margin: 200px;
        position: absolute;
        top: 65px;
        left: 25%;
      }
      div>span {
      
      
        display: inline-block;
        width: 40px;
        height: 40px;
        background-color: #333;
        font-size: 20px;
        color: #fff;
        text-align: center;
        line-height: 40px;
      }
      .tisp {
      
      
        display: none;
        position: absolute;
        top: 65px;
        left: 25%;
        width: 300px;
        color: red;
        background-color: skyblue;
        line-height: 40px;
        text-align: center;
        font-size: 14px;
      }
    </style>
    <script>
      window.addEventListener('load', function(){
      
      
        var hour = document.querySelector('.hour')      // 时
        var minute = document.querySelector('.minute')  // 分
        var second = document.querySelector('.second')  // 秒
        var div = document.querySelector('div')
        var tisp = document.querySelector('.tisp')
        // 你记得修改这个时间哟 
        var inputDate = +new Date('2022-09-23 18:31:00')
        // 加载页面时就调用一次防止有空白
        countDown()
        // 开启定时器
        var timer = setInterval(countDown,1000)
        // 封装一个倒计时函数
        function countDown(){
      
      
          var nowData = +new Date()
          times = (inputDate - nowData)/1000 
          var h = parseInt(times/60/60%24)
          h = h < 10 ? '0' + h : h
          hour.innerHTML = h

          var m = parseInt(times/60%60)
          m = m < 10 ? '0' + m : m
          minute.innerHTML = m

          var s = parseInt(times % 60)
          s = s < 10 ? '0' + s : s 
          second.innerHTML = s
          if (times < 0) {
      
      
            div.style.display = 'none'
            tisp.style.display = 'block'
            clearInterval(timer)
          } else {
      
      
            div.style.display = 'block'
            tisp.style.display = 'none'
          }
        }
      })
    </script>
  </head>
  <body>
    <div>
      <span class="hour">14</span>
      <span class="minute">59</span>
      <span class="second">14</span>
    </div>
    <span class="tisp">已过倒计时时间,下次尽早~</span>
  </body>
</html>

추천

출처blog.csdn.net/weixin_46278178/article/details/127014032