场景
小伙伴们应该有印象吧,当你注册一个网站的账号时候,他可能会提示你,让你阅读XX协议,然后下方是个按钮,按钮在N秒以后才能点击,恩,用意就是让你花点时间和耐心读一下人家列举的协议。亦或者,当你注册网站用户的时候,点击过“获取验证码”之后,必须等待60秒才能继续点击。
新玩法
那么是不是就只能乖乖的等,就没有别的招了呢,其实不尽然。
这里要小小的提一下,其实一般的倒计时,都是用一个叫做定时器的东东做的。
如果想让这个倒计时走的快一些或者慢一些,是有方法可以做到的。
那么方法是什么呢?就是修改计时器本身。
这里就会牵扯到一个知识点,叫做钩子函数。
举个简单的栗子,比如你是一个小学生,我是一个大学生,我想对你使坏。有天放学,你在路上遇到了我,我告诉你,你爸爸让你在路边打瓶酱油再回家,不管你是用自己私房钱也好,自己借钱也好,反正不打完酱油不准回家。恩,然后你乖乖的去打酱油了,那这个时候,我就可以到你家里,告诉你爸爸,啊,你不好好学习,又出去玩啦。然后等你打完酱油你就回家了,然而我在你打完酱油之前就已经给你爸爸说你坏话啦。
当然,这个例子也不尽然表达出其全部意思,比如,如果我再坏一点,我可能就把你卖给人贩子,然后,这个世界就没你什么事啦。
那么这个是怎么做到的呢?
且听我的栗子,一定是说你要回家的路上我把你堵住了,然后妨碍了你本来要回家这个事情。那么,首先我知道你放学会回家,然后我在通过一些方式,影响你回家这个事情:比如我骗你去打酱油,拖延你回家的时间,然后我就可以干些不可告人的事情;亦或者直接把你卖给人贩子,就没你什么事了;当然也可以在你回家之后,你出门之前,让你请我吃饭。
那么代码里是怎么做到的呢?
//获得原来计时器的引用
var realSetInterval = setInterval;
//将计时器的引用指向你自定义的函数
setInterval = function(callback,timeout){
var time = 100; //你想设定的倒计时间隔,这里为0.1ms
//在这个函数内调用计时器;并设置间隔时间为你想要的间隔时间
realSetInterval(callback,time);
}
//测试,10秒钟之后打印 haha
setInterval(function(){console.log('haha')},10000);
//咦,怎么0.1秒之后就打印出来了。
综述
比如上面一段代码,让定时器的倒计时按着你自己设定的倒计时走。
就拿短信验证码倒计时为例,它预计你要60秒后才能享受它的再次发送验证码功能。
那么它设置的就是每过1秒钟,60就减去1。那么你只要让它每过去0.5秒或者更短的时间减1就好啦。
当然,你也可以让定时器不工作,只要删掉realSetInterval(callback,time);
这句就好了。
这只是个小小的玩法,至于你怎么玩,完全可以发挥你的想象力,嘿。