zoukankan      html  css  js  c++  java
  • 定时器

    在JavaScript中,定时器有两个方法,分别是setInterval()和setTimeOut(),下面分别介绍着两个方法。

    setInterval()

    setInterval()是指按照指定的周期(以毫秒数计)来调用函数或计算表达式。方法会不停地调用函数直到clearInterval()被调用或者窗口被关闭。该方法接收三个参数:code、millisec和lang。

    • code:要调用的函数或要执行的代码串,必选
    • millisec:周期性执行或调用code之间的时间间隔,以毫秒计,必选
    • lang:JScript、VBScript或JavaScript,可选

    下面介绍一个实例:

    <!DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <title>定时器</title>
    </head>
    <body>
    <input type="text" id="clock" />
    <button onclick="int=window.clearInterval(int)">停止</button>
    <script>
    var int=self.setInterval("clock()",1000);
    function clock()
    {
        var d=new Date();
        var t=d.toLocaleTimeString();
        document.getElementById("clock").value=t;
    }
    </script>
    </body>
    </html>

    在上面的实例中,每1000毫秒执行一次clock函数,实现了下面的时间实时显示的效果,当用户点击停止时,时间停止。

    setTimeOut()

    setTimeOut()是在指定的毫秒数后调用函数或计算表达式,该方法的参数和setInterval()相同,下面也是用一个实例来具体展示。

    <!DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <title>定时器</title>
    </head>
    <body>
    <p>点击按钮,在等待 3 秒后弹出 "Hello"。</p>
    <button onclick="myFunction()">点我</button>
    
    <script>
    function myFunction()
    {
        setTimeout(function(){alert("Hello")},3000);
    }
    </script>
    </body>
    </html>

    上面的实例中,是在3000毫秒后执行前面的代码:当点击按钮后开始计时,3000毫秒后弹出“Hello”

    相关实例

     倒计时

    最简单的倒计时效果是在获取验证码等时候常见的60秒倒计时,其基本原理是每一秒钟就更新一次元素的内容。

    <!DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <title>定时器</title>
    </head>
    <body>
    <p><span id="time">60</span>s</p>
    <script>
         window.onload = function () {
          var timer =  setInterval(function () {
                document.getElementById("time").innerText -= 1;
                // 判断
                if(  document.getElementById("time").innerText === "0"){
                     // 清除定时器
                    clearInterval(timer);
                    //执行相关方法函数
                }
            }, 1000);
         }
    </script>
    </body>
    </html>

    还有一种常见的节假日倒计时,实现原理和上面基本相同,实现上面稍微复杂一点:我们需要获取将来节假日的事件,和现在的事件,获取两个事件的事件戳,然后进行转换,因为现在的时间一直在变,所以我们需要在定时间中进行计算。

    <!DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <title></title>
        <style>
            #time{
                font-size: 40px;
                color: red;
                text-align: center;
            }
        </style>
    </head>
    <body>
        <div id="time"></div>
    <script>
        window.onload = function () {
            // 1.获取需要的标签
            var time = document.getElementById('time');
            // 2. 自定义将来的时间
            var nextDate = new Date('2018/10/01 00:00:00');
            // 3. 开启定时器
            setInterval(function () {
                // 4. 获取现在的时间
                var currentDate = new Date();
    
                // 5. 获取时间戳
                var currentTime = currentDate.getTime();
                var nextTime = nextDate.getTime();
    
                // 6. 剩下的时间戳
                var allTime = nextTime - currentTime;
    
                // 7. 把毫秒转成秒
                var allSecond = parseInt(allTime / 1000);
    
                // 8.转化
                var d = size(parseInt(allSecond / 3600 / 24));
                var h = size(parseInt(allSecond / 3600 % 24));
                var m = size(parseInt(allSecond / 60 % 60));
                var s = size(parseInt(allSecond  % 60));
    
                // 9. 注入
                time.innerText = "距离国庆节还有"+ d +""+ h +"小时" + m +"分钟"+ s +"";
            }, 1000);
    
            function size(num) {
                return num >= 10 ? num : '0' + num;
            }
        }
    </script>
    </body>
    </html>

    时钟

     接下来要实现的是一个模拟的时钟效果,

    要实现上面的时钟,需要有表盘、时针、分针和秒针,然后根据实际时间计算时分秒分别每隔多久旋转多少度。

    具体实现代码如下:

    <!DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <title>Title</title>
        <style>
            *{
                margin: 0;
                padding: 0;
                list-style: none;
            }
    
            #box{
                width: 600px;
                height: 600px;
                background: url("images/clock.jpg") no-repeat;
                margin: 10px auto;
    
                position: relative;
            }
    
            #hour, #min, #second{
                position: absolute;
                left: 50%;
                top: 0;
                width: 30px;
                height: 600px;
                margin-left: -15px;
            }
    
            #hour{
                background: url("images/hour.png") no-repeat center center;
            }
    
            #min{
                background: url("images/minute.png") no-repeat center center;
            }
    
            #second{
                background: url("images/second.png") no-repeat center center;
            }
        </style>
    </head>
    <body>
       <div id="box">
           <div id="hour"></div>
           <div id="min"></div>
           <div id="second"></div>
       </div>
    <script>
        window.onload = function () {
            //获取需要的标签
            var hour = document.getElementById("hour");
            var min = document.getElementById("min");
            var second = document.getElementById("second");
    setInterval(function () { //获取当前的时间戳 var date = new Date(); //求出总毫秒数 var millS = date.getMilliseconds(); var s = date.getSeconds() + millS / 1000; var m = date.getMinutes() + s / 60; var h = date.getHours() % 12 + m / 60; //旋转 hour.style.transform = 'rotate('+ h * 30 +'deg)'; min.style.transform = 'rotate('+ m * 6 +'deg)'; second.style.transform = 'rotate('+ s * 6 +'deg)'; }, 10); } </script> </body> </html>

    时钟实例完整详细代码下载:点这里

  • 相关阅读:
    iOS 里面 NSTimer 防止 循环引用
    [leetcode 34] search for a range
    [leetcode 37]sudoku solver
    [leetcode 36] valid sudoku
    [leetcode 48] rotate image
    [leetcode 35] Search Insert Position
    [leetcode 27]Implement strStr()
    [leetcode 26] Remove Duplicates from Sorted Array
    [leetcode 25]Reverse Nodes in k-Group
    [leetcode 24] Swap Nodes in k-Group
  • 原文地址:https://www.cnblogs.com/yuyujuan/p/9570129.html
Copyright © 2011-2022 走看看