【融职培训】Web前端学习 第3章 JavaScript基础教程17 计时器方

一、计时器方法概述

计时器方法可以实现在指定的时间过后,单次或重复调用函数的功能,setTimeout可以实现函数在指定毫秒数后单次执行,setInterval可以实现函数在指定毫秒数后重复执行,语法如下所示:

1setTimeout(function(){2//一秒后执行3},1000);45setInterval(function(){6//一秒后执行,并且每隔一秒重复执行7},1000)

二、setTimeout

下面我们来实现一个效果,页面加载3秒后在控制台输出hello world

1setTimeout(function(){2console.log("hello world");3},3000)

当计时器开始计时后,我们可以使用clearTimeout方法让计时器停下来,下面我们来定义一个按钮,当页面加载后,如果我们在3秒钟之内点击按钮,计时器会停止,不会输出hello world,如果不点击按钮,3秒钟之后就会输出hello world

1varbtn = document.querySelector("button");2vart = setTimeout(function(){3console.log("hello world");4},3000)5btn.onclick =function(){6    clearTimeout(t);7}

setTimeout方法会返回一个整数类型的值,通过这个值,我们可以停止计时器,我们将setTimeout方法的返回值赋值给一个变量,当点击按钮的时候,使用clearTimeout方法,传入t,这样计时器就会停止,hello world就不会在控制台输出。

三、setInterval

setInterval的用法与setTimeout的用法非常类似,都是传入两个参数,第一个参数是计时器执行的函数,第二个参数是毫秒数。下面我们来实现一个效果,每3秒钟在控制台输出依次hello world

1setInterval(function(){2console.log("hello world");3},3000)

从代码可以看出,setInterval与setTimeout完全相同,区别在于setInterval参数中的函数没个指定毫秒数后都会重复执行,当我们不希望计时器重复执行的时候,就可以使用clearInterval方法来停止计时器

1varbtn = document.querySelector("button");2vart = setInterval(function(){3console.log("hello world");4},3000)5btn.onclick =function(){6    clearInterval(t);7}

下面我们来实现一个效果,让控制台输出每隔1秒按顺序输出正整数,从数字1开始输出

1varn = 1;2function showNumber(){3    console.log(n);4n++;5}6setInterval(showNumber,1000);7showNumber();//调用函数,可以在页面加载时直接输出1。

上面的代码与之前有一点区别,我们并没有直接给setInterval传递一个匿名函数,而是先定义了一个函数showNumber,然后将showNumber传递给setInterval,这两种写法效果是一样的,但是如果将匿名函数传入setInterval,这个函数将不能被调用。

在上面代码的结尾,我们在页面加载之后调用了一次showNumber,目的是为了让页面加载的时候就输出1,否则我们将要等待一秒之后才能看到控制台输出1。

这个案例会一直输出数字,下面我们来改进这个例子,当数字为10的时候就停止,效果看起来有些想之前讲过的for循环输出数字,但用计时器输出可以实现每个1秒输出一个数字,而不是连续的输出

1varn = 1,t=0; 2function showNumber(){ 3    console.log(n); 4if(n === 10){ 5        clearInterval(t); 6    } 7n++; 8} 9t=setInterval(showNumber,1000);10showNumber();

我们通过一个if语句判断n的值,当n到达10的时候,就停止计时器,这样计时器就不会再继续输出数字了。

我们还可以继续用按钮控制计时器,这次我们定义一个h1标签存放数字,再用两个按钮来实现“开始计数”和“停止计数”功能

1

0

2开始计数 3停止计数 4 5varbtnStart = document.querySelector("#start"); 6varbtnStop = document.querySelector("#stop"); 7varh1 = document.querySelector("h1"); 8var t; 9btnStart.onclick =function(){10clearInterval(t);//防止连续点击开始计时,导致创建多个计时器11t = setInterval(function(){12varnumber = Number(h1.innerHTML);//将h1的文本节点转换成数字13number++;14h1.innerHTML = number;15},300); 16        }1718btnStop.onclick =function(){19            clearInterval(t);20        }21

在网页中我们经常会看到指定秒数跳转到其他网页,我们可以用计时器方法来实现这个功能

1

5秒后跳转到百度

2 3varseconds = document.querySelector(".seconds"); 4setInterval(function(){ 5vars = Number(seconds.innerHTML); 6s--; 7seconds.innerHTML = s; 8if(s === 0){ 9location.href = "http://baidu.com";//location.href可以实现页面跳转10        }11},1000)12


课后练习

制作一个倒计时的功能,要求如下:

计算距离指定日期还有多少天,多少小时,多少分钟,多少秒;

在网页上动态输出这个时间;


【融职教育】在工作中学习,在学习中工作

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 214,377评论 6 496
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 91,390评论 3 389
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 159,967评论 0 349
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 57,344评论 1 288
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 66,441评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,492评论 1 292
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,497评论 3 412
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,274评论 0 269
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,732评论 1 307
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,008评论 2 328
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,184评论 1 342
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,837评论 4 337
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,520评论 3 322
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,156评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,407评论 1 268
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,056评论 2 365
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,074评论 2 352