zoukankan      html  css  js  c++  java
  • JavaScript (延时函数)setInterval与setTimeout

    JavaScript setInterval() 函数详解

    JavaScript的setInterval()函数用于设定每隔指定的时间就执行对应的函数或代码。

    该函数属于全局对象window。

    语法

    setInterval()函数的语法如下:

    setInterval ( code, milliseconds[, args...] )
    参数

    参数 描述
    code 需要执行的函数或js代码
    milliseconds 执行函数或代码的间隔时间,单位为毫秒
    args 可选参数用于给被调用的函数传递参数,参数可以有多个
    返回值

    setInterval()函数将返回一个标识符 ID,这个 ID 是唯一的(一般是整数,从 1 开始,每调用一次 setInterval() 就加 1)。

    如果需要 setInterval() 执行的函数或代码尚未执行,我们可以通过 clearInterval() 函数来取消该执行操作,clearInterval() 需要接收一个参数,这个参数就是 setInterval() 返回的标识符ID。

    示例&说明

    setInterval() 的参数code可以直接是一段js脚本。

    // 每隔5秒钟就弹出提示信息"欢迎来到CodePlayer"。
    setInterval('alert("欢迎来到CodePlayer");', 5000);
    运行代码

    参数code也可以是一个函数调用。

    function sayHi(msg){
    alert(msg);
    }

    // 每隔5秒钟就弹出提示信息"欢迎来到CodePlayer"。
    setInterval('sayHi("欢迎来到CodePlayer");', 5000);
    如果参数code执行的是一个函数则可以直接使用函数名称或者匿名函数作为参数。如果函数需要参数,我们可以通过setInterval()的可选参数为其传递相应的参数。

    //该函数不需要参数
    function test(){
    alert("测试");
    }
    // 每隔5秒钟就弹出提示信息"测试"。
    setInterval(test, 5000);

    // 使用匿名函数作为参数,每隔5秒钟就输出控制台信息"测试2"。
    setTimeout(function(){
    console && console.log("测试2");
    }, 5000);

    // 该函数需要两个参数
    function sayHello(name, age){
    alert("我叫" + name + ",今年" + age + "岁!");
    }
    //每隔5秒钟就弹出提示信息"我叫CodePlayer,今年18岁!"。
    setInterval(sayHello, 5000, "CodePlayer", 18);
    我们可以使用clearInterval()函数来取消setInterval()设定的定时操作。

    function test(){
    alert("测试");
    }

    // 每隔5秒钟就弹出提示信息"测试"。
    var intervalID = setInterval(test, 5000);

    // 取消该定时设置
    clearInterval(intervalID);
    此外,请一定注意:setInterval()的定时代码是在全局作用域下执行的,因此你不能在定时代码中调用某些局部变量,否则可能会报错。

    // 以下是错误的用法,setInterval的定时代码无法调用局部变量site
    function foo(){
    var site = "CodePlayer";
    setInterval('alert(site);', 5000);
    }
    foo();

    var x = 15;
    function bar(){
    var x = 18;
    setInterval('alert(x);', 5000); // 15
    }
    // 由于setInterval的定时代码是在全局作用域下执行的,因此这里的x为15
    bar();
    你可以通过以下方法来间接解决上述作用域问题:

    // 省略var修饰符,使用全局变量代替局部变量
    function foo1(){
    site = "CodePlayer 1";
    setInterval('alert(site);', 5000);
    }
    foo1();

    // 不使用变量,直接传递变量的值
    function foo2(){
    var site = "CodePlayer 2";
    setInterval('alert("' + site + '");', 5000);
    }
    foo2();

    // 延长作用域链,使其能够访问到该函数作用域
    function foo3(){
    var site = "CodePlayer 3";
    setInterval(function(){
    alert(site);
    }, 5000);
    }
    foo3();

    // 调用指定的函数,并给函数传递相应的参数
    function callback(msg){
    alert(msg);
    }
    function foo4(){
    var site = "CodePlayer 4";
    setInterval(callback, 5000, site);
    }
    foo4();

    他们分别是setTimeout函数和setInterval函数,这两个函数能使网页呈现非常一些网页中比较常见的效果,比如说图片轮播,等一些非常好玩的效果。下面就来一起来了解这两个函数吧!
    一setTimeout函数和setInterval函数的语法以及应用
    1.setTimeout函数
    定义和用法:setTimeout()方法用于在指定的毫秒数后调用函数或计算表达式。  
    语法:setTimeout(code,millisec);
    参数:
    code (必需):要调用的函数后要执行的 JavaScript 代码串。   
    millisec(必需):在执行代码前需等待的毫秒数。  
    提示:
    setTimeout() 只执行 code 一次。如果要多次调用,请使用 setInterval() 或者让 code 自身再次调用 setTimeout()。
    返回值
    一个可以传递给 Window.clearTimeout() 从而取消对 code 的周期性执行的值。
    既然setTimeout是一个定时器函数,那么就有一个一个函数来清理定时器,那我们就用到了clearTimeout函数。
    clearTimeout(setTimeout()返回的ID值);
    2.setInterval定义
    setInterval() 方法可按照指定的周期(以毫秒计)来调用函数或计算表达式。
    setInterval() 方法会不停地调用函数,直到 clearInterval() 被调用或窗口被关闭。由 setInterval() 返回的 ID 值可用作 clearInterval() 方法的参数。
    语法
    setInterval(code,millisec[,"lang"]);
    参数code必需。要调用的函数或要执行的代码串。
    millisec必须。周期性执行或调用 code 之间的时间间隔,以毫秒计
    返回值
    一个可以传递给 Window.clearInterval() 从而取消对 code 的周期性执行的值。
    既然setTimeout是一个定时器函数,那么就有一个一个函数来清理定时器,那我们就用到了clearInterval()函数。
    clearInterval()(setInterval()返回的ID值);
    二.案例:
    倒计时效果

    <!DOCTYPE html>
    <html xmlns="http://www.w3.org/1999/xhtml">
    <head>
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
    <title>倒计时效果</title>
    <script type="text/ecmascript">
    //使用js方式实现倒计时效果
    var t1;
    window.onload = function () {

    //01定位到开始按钮返回一个dom对象
    var btns = document.getElementById('btnStart');
    //02.给开始按钮注册单击事件
    btns.onclick = function () {
    //执行ssetInerval函数第一个参数要定时执行的函数,第二个参数该函数每个多少毫秒执行一次
    t1= setInterval(start, 1000);

    }
    //03定位到停止按钮返回一个dom对象
    var btnst = document.getElementById('btnStop');
    btnst.onclick = function () {
    clearInterval(t1);
    }
    }
    //要隔1秒执行的函数
    function start() {
    //01.获取div中的文本赋值给一个变量
    var divdom = document.getElementById('msg');
    var divnum = divdom.innerText;
    //判断divnum的值是否为0
    if (divnum > 0) {
    divnum--;
    //把减过的值重新赋值给divnum
    divdom.innerText = divnum;
    }
    }
    </script>
    </head>
    <body>
    <input type="button" id="btnStart" value="开始" />
    <input type="button" id="btnStop" value="停止" /><br />
    <div id="msg">10</div>

    </body>
    </html>
    背景图片切换:

    <!DOCTYPE html>
    <html xmlns="http://www.w3.org/1999/xhtml">
    <head>
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
    <title></title>
    <script type="text/javascript">
    var count = 1;//定义初始变量默认为第一张图片
    window.onload = function () {
    //使用定时器函数每隔一秒定义执行一次show函数
    setInterval(show,1000);
    }
    //要执行的函数
    function show() {
    //如果图片到达最后一张(5张),就将下一张显示的图片改为第一张,如果没有到达最后一张就将显示下一张图片
    if (count > 5) {
    count = 1;
    }
    else {
    count++;
    }
    //获取id为myimg的dom对象
    var dom = document.getElementById("myimg");
    //改变img标签的src属性指向,改变图片
    dom.src = "image/"+count+".jpg"
    }

    </script>
    </head>
    <body>
    <img src="image/1.jpg" alt="Alternate Text" width="200px" height="200px" id="myimg" />
    </body>
    </html>
    点名器

    <!DOCTYPE html>
    <html xmlns="http://www.w3.org/1999/xhtml">
    <head>
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
    <title></title>
    <script type="text/javascript">
    //定义一个数组保存该点名器中的基本数据
    var data = ['张三', '李四', '王二', '小陈', '小张'];
    var i = 0;//声明一个初始变量默认让第一个人显示在页面上
    var t1;
    window.onload = function () {
    //02.获取开始点名按钮的dom对象给该对象注册单击事件
    var dom = document.getElementById("mybtn");
    dom.onclick = function () {
    //使用setInterval函数隔500毫秒调用一次result函数
    t1 = setInterval(start, 500);
    //该方法隔6秒他只调用一次
    setTimeout(stop,6000);
    }
    //定义一个匿名函数把他赋值给一个变量result
    var start= function() {
    //03获取h1标签对象,给h1标签的文本赋值
    var domh = document.getElementById("myh1");
    domh.innerText = data[i % data.length];//替换已存在,元素值
    i++;
    }
    //调用匿名函数
    start();
    var stop = function () {
    //清除定时器
    clearInterval(t1);
    //弹出提示框点到的同学请作答
    alert("请" + document.getElementById("myh1").innerText+"同学作答");
    }

    }
    </script>
    </head>
    <body>
    <h1 id="myh1"></h1>
    <button id="mybtn"> 开始点名</button>

    </body>

    </html>
    通过上面的几个案例,我相信大家一点对这两个函数应该不陌生了。

  • 相关阅读:
    leetcode练习:26. Remove Duplicates from Sorted Array
    leetcode练习:11. Container With Most Water
    leetcode练习:5. Longest Palindromic Substring
    leetcode练习:2.Add Two Numbers
    算法笔记:分治
    (排序回顾)快速排序
    (排序回顾)归并排序
    leetcode练习:2017/09/21~09/22
    算法笔记:递归&迭代
    在Treeview中节点的data属性中保存记录类型及其消除的办法
  • 原文地址:https://www.cnblogs.com/luorende/p/7999165.html
Copyright © 2011-2022 走看看