JavaScript进阶教程(第三课第二部分)第1/2页

所属分类: 网络编程 / JavaScript 阅读数: 1823
收藏 0 赞 0 分享

    要使定时器循环工作你需要写一个函数实现循环调用。这里是一个例子:

    var the_count = 0;
    var the_timeout;
    function doTimer()
    {
        window.document.timer_form.the_text.value = the_count;
        the_count += 2;
        the_timeout = setTimeout("doTimer();", 2000);
    }

    这里用到的定时器就是上一页所用的定时器。当用户点击按钮时就调用该函数。该函数将the_count的当前值写到文字框中。然后the_count增加2,则开始调用函数自身。文字框中的数值也相应更新,the_count在增加2, 则再次调用函数自身。在等待的这两秒期间浏览器则可以执行其他的同步工作。the_count一增加2就执行另一次setTimeout()。你不用担心会造成内存崩溃,因为在给定时间内只有一个setTimeout()在执行。

    而无限的"while" 循环则会锁定浏览器的工作,在执行该循环的过程中浏览器不能同时执行别的任何指令。而setTimeout则可以使循环的间隙中让浏览器执行别的工作。

    如何取消setTimeout?

    现在你已经学习了如何设置一个无限循环。但是你必须懂得如何终止循环。其指令就是clearTimeout。上例中定时器还有下面这个表单元素:

    <input type="button" value="stop timer" onClick="clearTimeout(the_timeout);">

    点击这个按钮就可以终止定时器。指令是clearTimeout(),其实很简单,如果你这样设置setTimeout,the_timeout = setTimeout("some javascript",3000);

    你可以这样取消定时器:clearTimeout(the_timeout);

    很简单,对吧?下面我们看一个复杂循环定时器,一个可以报告时间的定时器。

    现在时间是:

   

    点击“启动时钟”则时钟开始运行。它从你的计算机中读取时间并每半秒更新一次文字框中的显示。这个例子通过一个自调用的函数设置了一个定时器。同时这个例子可以让你了解一点Date对象的功能。当讲解cookies时,我提到过Date对象。

    以下是代码:
    function writeTime() {
        // 获得日期对象
        var today = new Date();

        // 从对象中获得信息
        var hours = today.getHours();
        var minutes = today.getMinutes();
        var seconds = today.getSeconds();

        // fixTime 使分和秒可以正常显示
        // 对于小于10的数字则在该数字前加一个0
        minutes = fixTime(minutes);
        seconds = fixTime(seconds);

        //将时间字符串组合在一起并写出
        var the_time = hours + ":" + minutes + ":" + seconds;
        window.document.the_form.the_text.value = the_time;

        //每半秒钟执行一次该函数
        the_timeout= setTimeout('writeTime();',500);
    }

    function fixTime(the_time) {
        if (the_time <10)
        {
            the_time = "0" + the_time;
        }

        return the_time;
    }

    我们仔细研究一下代码。

    var today = new Date();
    正如new Array() 可以生成一个新的数组,你可以可以用new Date() 生成一个新的日期对象。生成对象之后,你可以对其提出你的问题。你生成的新的日期对象的括号中间没有任何参数, 但JavaScript会查询计算机的始终并用其生成新的日期对象。现在我们的日期对象名为"today" ,我们可以从中提取相应的信息。

    var hours = today.getHours();
    这条用于获得当前的小时值。它是军队格式的时间,即,如果当前时间是下午两点,则它返回的值是14。getHours()是Javascript的日期对象内置的方法调用。

    var minutes = today.getMinutes(); var seconds = today.getSeconds();
    这几行原理和getHours()类似。

    minutes = fixTime(minutes);
    getMinutes存在一些问题,如果分钟是11:01, getMinutes将返回 "1"。时钟的显示格式可不是这样,它应该显示为“01”。fixTime函数就是用于执行纠正显示格式的功能。

    下面两行将字符串组合在一起并显示出来,
    the_timeout = setTimeout('writeTime();', 500);

    设置每半秒执行一次该函数的循环。

    下一讲我们将学习如何在定时器中加入变量。

更多精彩内容其他人还在看

Node.js事件的正确使用方法

这篇文章主要给大家介绍了关于Node.js事件的正确使用方法,文中通过示例代码介绍的非常详细,对大家学习或者使用Node.js具有一定的参考学习价值,需要的朋友们下面来一起学习学习吧
收藏 0 赞 0 分享

微信小程序自定义导航栏实例代码

这篇文章主要给大家介绍了关于微信小程序自定义导航栏的相关资料,文中通过示例代码介绍的非常详细,对大家学习或者使用微信小程序具有一定的参考学习价值,需要的朋友们下面来一起学习学习吧
收藏 0 赞 0 分享

js字符串处理之绝妙的代码

这篇文章主要介绍了js字符串处理之绝妙的代码,包括字符串去重、将字符放在对象中遍历拼接出字符串、把字符串的奇数位和偶数位分别提取到两个数组中、将两个数组按奇数位和偶数位插入拼接为字符串,有时候需要对字符进行处理的时候可以用得到
收藏 0 赞 0 分享

vue设计一个倒计时秒杀的组件详解

这篇文章主要介绍了vue设计一个倒计时秒杀的组件,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
收藏 0 赞 0 分享

详解服务端预渲染之Nuxt(介绍篇)

这篇文章主要介绍了详解服务端预渲染之Nuxt(介绍篇),小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
收藏 0 赞 0 分享

javascrit中undefined和null的区别详解

这篇文章主要介绍了javascrit中undefined和null的区别详解,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
收藏 0 赞 0 分享

浅谈javascript中的prototype和__proto__的理解

这篇文章主要介绍了浅谈javascript中的prototype和__proto__的理解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
收藏 0 赞 0 分享

详解vue中this.$emit()的返回值是什么

这篇文章主要介绍了详解vue中this.$emit()的返回值是什么,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
收藏 0 赞 0 分享

浅谈express.js框架中间件(middleware)

这篇文章主要介绍了浅谈express.js框架中间件(middleware),小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
收藏 0 赞 0 分享

vue自定义指令directive的使用方法

这篇文章主要介绍了vue自定义指令directive的使用方法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
收藏 0 赞 0 分享
查看更多