setInterval()函数的用法心得
来源:互联网 发布:四氧化三铁化学式算法 编辑:程序博客网 时间:2024/06/14 15:47
最近在用setInterval()函数实现一个倒计时功能,倒计时结束则跳转到另一个页面。
遇到的问题如下:
有问题的代码:
var isLogin = getCookie("isLogin"); var num = 5; if (isLogin != 1) { // 显示遮罩层 $("#bg_background").show(); $("#prompt_msg").show(); // 倒计时5s // $("#time").text(num);
var time_id = setInterval(function(){ $("#time").text(num); num--;
console.log(num); if( num < 0){ clearInterval(time_id); } },1000); location.href="../user/login.html?url=当前浏览器的url";
如果将代码,写成这样的话,发现当页面一打开的话,过了一秒就转到另一个页面了,而本来显示倒计时的标签没有数值。
在调试的过程中,将
location.href="../user/login.html?url=当前浏览器的url";这句话注释掉后,发现num输出值是符合要求的,说明当没有加跳转链接前,代码正常运行。
现在在 location.href="../user/login.html?url=当前浏览器的url";的前面加上语句:console。log("output here");
var isLogin = getCookie("isLogin"); var num = 5; if (isLogin != 1) { // 显示遮罩层 $("#bg_background").show(); $("#prompt_msg").show(); // 倒计时5s // $("#time").text(num); var time_id = setInterval(function(){ $("#time").text(num); num--; if( num < 0){ // location.href="../user/login.html?url=当前浏览器的url"; clearInterval(time_id); } },1000); console.log("output here"); location.href="../user/login.html?url=当前浏览器的url";
输出结果是:
output here
num:0
从输出的结果,我们可以发现,console.log("output here");语句比定时器里面的语句先执行的快。也就是说,按照上面的写法,当页面加载的时候,当流程走到定时器函数的时候,程序并不会一直停在定时器函数里面,而是并行的执行下面的语句,也就是执行跳转页面语句,此时定时器函数还没有执行完。即也就是为什么页面加载完时候,会马上跳转页面了。解决方法:将跳转语句放在定时器函数里面:如下面所示:
这是显示正常的代码:
var isLogin = getCookie("isLogin"); var num = 5; if (isLogin != 1) { // 显示遮罩层 $("#bg_background").show(); $("#prompt_msg").show(); // 倒计时5s // $("#time").text(num); var time_id = setInterval(function(){ $("#time").text(num); num--; if( num < 0){ location.href="../user/login.html?url=当前浏览器的url"; clearInterval(time_id); } },1000);
总结:如果我们想实现定时功能,时间到就执行相应操作,要把该操作放在判断定时器结束的判断条件里面,也就是把操作放在定时器函数里面。不能把操作和定时器函数放在并行的位置。在c等语言里面,程序都是按照顺序执行的,但是在Js里面特别,当在定时函数的后面还有相应操作的语句,那么浏览器不会等到定时器结束才执行定时器函数后面的语句,而是并行执行。也就是定时时间还没到,就执行定时函数后面的语句了
阅读全文
1 0
- setInterval()函数的用法心得
- 内置函数setInterval的用法
- 关于时间间隔函数setinterval的用法
- 关于JAVASCRIPT中setInterval函数的一些用法
- javascript中settimeout和setinterval函数的用法和实例
- clearInterval()与setInterval()的使用心得
- setInterval 和 setTimeout 的用法
- SetTimeout和setInterval的用法
- AS3 setTimeOut、setInterval的用法 .
- JS setInterval setTimeout的用法
- JavaScript中setInterval的用法
- window.setInterval javascript 定时执行函数用法
- js的setInterval函数语法
- setInterval() 用法
- setInterval() 用法
- apr_file_open函数用法心得
- snprintf 函数用法心得
- JS 的定时器函数setInterval和setTimeout的用法和区别
- NOIP2013 Day2 T3 华容道
- 线程池使用
- Android 硬件加速
- QT focusInEvent 事件
- 一分钟了解“do and has done”
- setInterval()函数的用法心得
- PHP中的字符串格式化输出函数和字符串比较函数
- 文件的输入和输出
- LOJ#117 有源汇有上下界最小流
- 02_MyBatis_crud操作
- ngx_debug_point
- Android content provider 获取手机联系人
- “智能问诊”项目——数据获取(1)
- 高性能Java解析器实现过程详解