JS基础知识——定时器

1、定时器——setInterval("执行函数名",间隔时间);

  setInterval(fun,1000);每隔1秒钟执行一次fun函数

  setInterval("fun()",1000);每隔1秒钟执行一次fun函数

  排队执行——间隔时间t1和程序执行时间t2,如果t1<t2(程序执行时间比间隔时间还长),这样是不合理的。必须是t2<=t1。

      timer=setInterval(fun,1000);  clearInterval(timer);  关闭定时器

2、倒计时

  原理:最终时间-现在时间=倒计时

  问题1:如果直接用年份和月份来减,会存在年份不一样,月份不一样导致天数不一样的尴尬局面,所以就借助于一个基准时间,就是1970年1月1日午夜。

  解决办法:用最终时间的距离1970 的毫秒数-现在距1970的毫秒数=将得到的结果不断转化就可以了

  问题2:现在距离1970的毫秒数容易获取,但是最终时间的毫秒数如何获取呢?

  解决办法:var nowTime=new Date();//不写参数,得到的是当前时间

         var endTime=new Date("2016/11/11");   //写了参数,就可以设置一个未来的时间

       var endTime=new Date("2016/11/11 12:00:00");//这个是写了一个更具体的参数,带时钟的未来时间

3、定时器——setTimeout("fun()",1000);  

    延迟1秒钟执行函数,只执行一次。

4、setTimeout应用实例

功能:页面倒计时跳转 

代码:这个比setinterval要更友好,更常用。

<!DOCTYPE html>
<html>
    <head>
        <meta charset="utf-8" />
        <title></title>
        
    </head>
    <body>
        <div id="box"></div>
    </body>

</html>
    <script type="text/javascript">
    var box=document.getElementById("box");
    setTimeout(goIndex,1000);
    var time=5;
    function goIndex(){
        time--;
        if(time<0){
            window.location.href="http://www.baidu.com";
        }else{
            box.innerHTML="<a href='http://www.baidu.com'>还有"+time+"秒跳转到百度首页...</a>";
            setTimeout(goIndex,1000);
        }
    }
</script>

 5、setTimeout应用实例

  描述:图片上下滚动播放

  原理:让图片绝对定位,改变图片的top值,让其上下移动。

  代码:

<!DOCTYPE html>
<html>
    <head>
        <meta charset="UTF-8">
        <title></title>
        <style type="text/css">
            *{margin:0;padding: 0;}
            #box{
                width: 512px;
                height: 400px;
                margin:20px auto;
                overflow: hidden;
                position: relative;
            }
            #box img{
                position: absolute;
                top: 0;
                left: 0;
            }
            #box span{
                position: absolute;
                left:0;
                width:512px;
                height:200px;
                cursor: pointer;
            }
            #box #top{
                top:0;
            }
            #box #bottom{
                bottom:0;
            }
        </style>
        <script type="text/javascript">
            window.onload=function(){
                var top=document.getElementById("top");
                var bottom=document.getElementById("bottom");
                var pic=document.getElementsByTagName("img")[0];
                var topposition=0;
                var height=1470;
                var timer=null;
                top.onmouseover=function(){
                    timer=setTimeout(goDown,10);
                    function goDown(){
                        topposition--;
                        if(topposition>(-1*1070)){
                            pic.style.top=topposition+"px";
                            timer=setTimeout(goDown,10);
                        }else {
                            topposition=-1070;
                            pic.style.top=topposition+"px";
                            clearTimeout(timer);//跳出递归
                        }
                    }
                }
                top.onmouseout=function(){
                    clearTimeout(timer);
                    pic.style.top=topposition+"px";
                }
                bottom.onmouseover=function(){
                    timer=setTimeout(goUp,10);
                    function goUp(){
                        topposition++;
                        if(topposition<0){
                            pic.style.top=topposition+"px";
                            timer=setTimeout(goUp,10);
                        }else{
                            topposition=0;
                            pic.style.top=topposition+"px";
                            clearTimeout(timer);//跳出递归
                        }
                    }
                }
                bottom.onmouseout=function(){
                    clearTimeout(timer);
                    pic.style.top=topposition+"px";
                }
            }
        </script>
    </head>
    <body>
        <div id="box">
            <img src="img/mi.png" alt="" />
            <span id="top"></span>
            <span id="bottom"></span>
        </div>
    </body>
</html>

 

  

转载于:https://www.cnblogs.com/sylz/p/5746063.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
在 CC2430 的应用开发中,定时器中断是非常常用的一个功能。下面我们将介绍几个关于定时器中断的基础实验。 ## 实验一:定时器中断实验 ### 实验目的 了解 CC2430 的定时器模块,并掌握其中断的使用方法。 ### 实验原理 CC2430 的定时器模块有三个定时器:T1、T2 和 T3。其中,T1 和 T2 是 16 位的定时器,T3 是 8 位的定时器。在本实验中,我们将以 T1 定时器为例,介绍定时器中断的使用方法。 T1 定时器的计数器是一个 16 位的寄存器,它可以通过以下寄存器进行配置: - T1CC0H/T1CC0L:T1 的比较器 0,可以用来产生比较中断。 - T1CC1H/T1CC1L:T1 的比较器 1,可以用来产生比较中断。 - T1CC2H/T1CC2L:T1 的比较器 2,可以用来产生比较中断。 - T1IE:T1 中断使能寄存器,用来使能 T1 的中断。 - T1CTL:T1 控制寄存器,用来配置 T1 的计数模式、时钟源等参数。 在本实验中,我们将使用 T1 的比较器 0,配置为每隔 1 秒钟产生一次中断。 ### 实验步骤 1. 配置 T1 的计数模式、时钟源等参数。 ```c T1CTL |= 0x0C; // T1 计数模式为比较器模式 T1CTL &= ~0x03; // T1 时钟源为时钟源选择寄存器 CLKCON 的 CLKSPD 位所选择的时钟源 T1CTL &= ~0x30; // T1 比较器模式为单次比较模式 ``` 2. 配置 T1 的比较器 0。 ```c T1CC0L = 0x00; // T1 的比较器 0 的低 8 位 T1CC0H = 0x80; // T1 的比较器 0 的高 8 位 ``` 3. 使能 T1 的中断。 ```c T1IE = 1; // 使能 T1 的中断 ``` 4. 在主函数中进入循环,等待定时器中断的触发。 ```c while(1); ``` 5. 在定时器中断服务函数中处理中断事件。 ```c #pragma vector = T1_VECTOR __interrupt void T1_ISR(void) { T1IF = 0; // 清除 T1 中断标志 // 中断处理代码 } ``` ### 实验结果 当程序运行后,每隔 1 秒钟会触发一次定时器中断。在中断服务函数中可以添加相应的处理代码,实现定时器中断的功能。 ## 实验二:定时器中断实现 LED 闪烁 ### 实验目的 通过定时器中断实现 LED 的闪烁。 ### 实验原理 在上一个实验中,我们已经学习了如何使用定时器中断。在本实验中,我们将以 T1 定时器为例,通过定时器中断实现 LED 的闪烁。 在本实验中,我们将使用 P0.0 引脚控制 LED 的状态。LED 亮时,P0.0 输出低电平;LED 灭时,P0.0 输出高电平。我们可以通过改变 P0.0 引脚的电平状态,实现 LED 的闪烁。 ### 实验步骤 1. 配置 P0.0 引脚为输出模式。 ```c P0SEL &= ~0x01; // P0.0 引脚配置为 GPIO 模式 P0DIR |= 0x01; // P0.0 引脚配置为输出模式 ``` 2. 配置 T1 的计数模式、时钟源等参数。 ```c T1CTL |= 0x0C; // T1 计数模式为比较器模式 T1CTL &= ~0x03; // T1 时钟源为时钟源选择寄存器 CLKCON 的 CLKSPD 位所选择的时钟源 T1CTL &= ~0x30; // T1 比较器模式为单次比较模式 ``` 3. 配置 T1 的比较器 0。 ```c T1CC0L = 0x00; // T1 的比较器 0 的低 8 位 T1CC0H = 0x80; // T1 的比较器 0 的高 8 位 ``` 4. 使能 T1 的中断。 ```c T1IE = 1; // 使能 T1 的中断 ``` 5. 在定时器中断服务函数中处理中断事件,改变 P0.0 引脚的电平状态。 ```c #pragma vector = T1_VECTOR __interrupt void T1_ISR(void) { T1IF = 0; // 清除 T1 中断标志 P0_0 = ~P0_0; // P0.0 引脚电平状态取反 } ``` 6. 在主函数中进入循环,等待定时器中断的触发。 ```c while(1); ``` ### 实验结果 当程序运行后,LED 会以 1 秒钟的频率闪烁。如果需要改变 LED 闪烁的频率,可以通过修改 T1 的比较器 0 的值来实现。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值