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

    定时器简介

    <!doctype html>
    <html>
    
    <head>
        <meta charset="utf-8">
        <title></title>
        <style type="text/css">
        </style>
    
        <script type="text/javascript">
            window.onload = function () {
                // 获取count
                var count = document.getElementById("count");
    
                // 使count中的内容,自动切换
                /*
                    JS的程序的执行速度是非常非常快的
                      如果希望一段程序,可以每间隔一段时间执行一次,可以使用定时调用
                */
                /*
                    setInterval()
                        定时调用
                        可以将一个函数,每隔一段时间执行一次
                        参数:
                            1.回调函数,该函数会每隔一段时间被调用一次
                            2.每次调用间隔的时间,单位是毫秒
                        返回值:
                            返回一个Number类型的数据
                            这个数字用来作为定时器的唯一标识
                */
                var num = 1;
                var timer = setInterval(function () {
                    count.innerHTML = num++;
                    if (num == 11) {
                        // 关闭定时器
                        clearInterval(timer);
                    }
                }, 1000);
                console.log(timer);
    
                /*
                    clearInterval()可以用来关闭一个定时器
                    方法中需要一个定时器的标识作为参数,这样将关闭标识对应的定时器
                */
                // clearInterval(timer);
            }
        </script>
    </head>
    
    <body>
        <h1 id="count">1</h1>
    </body>
    
    </html>

    延时调用

    <!doctype html>
    <html>
    
    <head>
        <meta charset="utf-8">
        <title></title>
        <style type="text/css">
        </style>
    
        <script type="text/javascript">
            window.onload = function () {
                var num = 1;
                // 开启一个定时器
                setInterval(function () {
                    console.log(num++);
                }, 3000)
    
                /*
                    延时调用
                      延时调用一个函数不马上执行,而是隔一段时间以后在执行,而且只会执行一次
                        
                    延时调用和定时调用的区别,定时调用会执行多次,而延时调用只会执行一次
                    延时调用和定时调用实际上是可以互相代替的,在开发中可以根据自己的需要去选择
                */
    
                var timer = setTimeout(function () {
                    console.log(num++);
                }, 3000);
    
                // 使用clearTimeout()来关闭一个延时调用
                clearTimeout(timer);
            }
        </script>
    </head>
    
    <body>
        <div id="box1"></div>
    </body>
    
    </html>

     定时器小应用

    <!doctype html>
    <html>
    
    <head>
        <meta charset="utf-8">
        <title></title>
        <style type="text/css">
            * {
                margin: 0;
                padding: 0;
            }
    
            #box1 {
                width: 100px;
                height: 100px;
                background-color: red;
                position: absolute;
                left: 0;
            }
    
            #box2 {
                width: 100px;
                height: 100px;
                background-color: yellow;
                position: absolute;
                left: 0;
                top: 200px;
            }
        </style>
    
        <script type="text/javascript">
            window.onload = function () {
                // 获取box1
                var box1 = document.getElementById("box1");
                // 获取btn01
                var btn01 = document.getElementById("btn01");
                // 获取btn02
                var btn02 = document.getElementById("btn02");
                // 获取btn03
                var btn03 = document.getElementById("btn03");
                // 获取btn04
                var btn04 = document.getElementById("btn04");
                // 设置一个变量用来保存定时器的标识
                /*
                    目前我们的定时器的标识由全局变量timer保存,
                        所有的执行正在执行的定时器都在这个变量中保存
    
                */
                // var timer;
    
                // 点击按钮后,使box1向右移动(left值增大)
                btn01.onclick = function () {
                    move(box1, "left", 800, 20);
                };
    
                // 点击按钮后,使box1向左移动(left值减小)
                btn02.onclick = function () {
                    move(box1, "left", 0, 10);
                };
    
                btn03.onclick = function () {
                    move(box2, "left", 800, 10);
                };
    
                // 测试按钮
                btn04.onclick = function () {
                    // move(box2, "width", 800, 10);
                    // move(box2, "height", 800, 10);
                    // move(box2, "top", 800, 10);
                    move(box2, "width", 800, 10, function () {
                        // alert("动画执行完毕了~");
                        move(box2, "height", 400, 10, function () {
                            move(box2, "top", 0, 10, function () {
                                move(box2, "width", 100, 10, function () {
    
                                });
                            });
                        });
                    });
                };
    
                //尝试创建一个可以执行简单动画的函数
                /*
                    参数:
                        obj:要执行动画的对象
                        attr:要执行动画的样式,比如left top width height
                        target:执行动画的目标位置
                        speed:移动的速度
                        callback:回调函数,这个函数将会在动画执行完毕以后执行
                */
                function move(obj, attr, target, speed, callback) {
    
                    // 关闭上一个定时器
                    clearInterval(obj.timer);
    
                    //获取元素目前的位置
                    var current = parseInt(getStyle(obj, attr));
    
                    //判断速度的正负值
                    //如果从0向800移动,则speed为正
                    //如果从800向0移动,则speed为负
                    if (current > target) {
                        //此时速度应为负值
                        speed = -speed;
                    }
    
                    // 开启一个定时器,用来执行动画效果
                    // 向执行动画的对象中添加一个timer属性,用来保存它自己的定时器的标识
                    obj.timer = setInterval(function () {
                        //获取box1的原来的left值
                        var oldValue = parseInt(getStyle(obj, attr));
    
                        // 在旧值的基础上增加
                        var newValue = oldValue + speed;
    
                        // 判断newValue是否大于800
                        // 从800向0移动
                        // 向左移动时,需要判断newValue是否小于target
                        // 向右移动时,需要判断newValue是否大于target
                        if (speed < 0 && newValue < target || speed > 0 && newValue > target) {
                            newValue = target;
                        }
    
                        // 将新值设置给box1
                        obj.style[attr] = newValue + "px";
    
                        //当元素移动到800px时,使其停止执行动画
                        //当元素移动到0px时,使其停止执行动画
                        if (newValue === target) {
                            //达到目标,关闭定时器
                            clearInterval(obj.timer);
                            //动画执行完毕,调用回调函数
                            callback && callback();
                        }
                    }, 30);
                }
    
    
    
                /*
                定义一个函数,用来获取指定元素的当前的样式
                    参数:
                        obj 要获取样式的元素
                        name 要获取的样式名
                */
                function getStyle(obj, name) {
                    if (window.getComputedStyle) {
                        //正常浏览器的方式,具有getComputedStyle( )方法
                        return getComputedStyle(obj, null)[name];
                    } else {
                        // IE8的方式,没有getComputedStyle( )方法
                        return obj.currentStyle[name];
                    }
                }
            }
        </script>
    </head>
    
    <body>
        <button id="btn01">点击按钮以后box1向右移动</button>
        <button id="btn02">点击按钮以后box1向左移动</button>
        <button id="btn03">点击按钮以后box1向右移动</button>
        <button id="btn04">测试按钮</button>
    
        <br /> <br />
        <div id="box1"></div>
        <div id="box2"></div>
        <div style=" 0; height: 1000px; border-left:1px black solid; position: absolute; left: 800px; top: 0;"></div>
    </body>
    
    </html>

     

    转载请注明出处:https://www.cnblogs.com/stu-jyj3621
  • 相关阅读:
    三菱Q系列PLC MC协议通讯
    相机常用属性配置简介[转]---Labview IMAQ 修改相机曝光等参数的方法
    数码显微镜的实际放大倍数的正确计算方法【转载】
    VS2012 C# 配置log4net
    CHM格式帮助文档无法打开的问题
    win10 下安装win7虚拟机
    杂记:使用RawCap和Wireshark对 127.0.0.1或localhost 进行抓包
    杂记:01
    linux应用编程一:文件IO和目录操作
    QTableWidget常用函数及注意事项
  • 原文地址:https://www.cnblogs.com/stu-jyj3621/p/13418914.html
Copyright © 2011-2022 走看看