js定时器的使用

241 阅读2分钟

「这是我参与2022首次更文挑战的第12天,活动详情查看:2022首次更文挑战」。

在我们平常使用中,经常会用到定时的功能,比如触发事件后隔几秒钟再执行代码,像之前嗑瓜子的文章中,就是使用了两个动画,后一个动画为了将效果显示为前一个动画执行完成后再执行,就是用到了setTimeout()方法进行定时操作。

js 定时器有以下两个方法

setInterval() :按照指定的周期(以毫秒计)来调用函数或计算表达式。方法会不停地调用函数,
                直到 clearInterval() 被调用或窗口被关闭。

setTimeout() :在指定的毫秒数后调用函数或计算表达式

语法参数通常有2个, 一个是要执行的代码,一个是执行代码前的时间间隔,以毫秒计,也就是1000就是1秒

这个是定时器的一个小例子,2秒后通过document元素获取改变div内的内容,可以将它放在函数里面,也可以将代码直接写在setTimeout里面,注意直接放要在外面加引号(双引号不能包裹双引号,不然会抱错)

<div id="content">1</div>
<script>
    self.setTimeout("change()",2000);
    // self.setTimeout('ch += 1; var s = ch + ""; document.getElementById("content").innerHTML = s;',2000);
    function change(){
        ch += 1;
        var s = ch + ""
        document.getElementById("content").innerHTML = s;
    }
</script>

上面这段代码如果使用 setTimeout 方法定时,就只会将content中的内容改变一次( 1 -> 2 ),使用setInterval的话就会每隔2秒改变一次content中的内容

定时器intervalId 方法会每隔指定的毫秒数后重新运行函数,这里是一段应用intervalId方法实现文字滚动前推。点击开始触发定时器,点击中止清除定时器,但再次点击开始会继续中止前的状态滚动,因为我们每次执行函数都有改变msg的内容

    <div id="app">
        <input type="button" value="开始" @click="start()">
        <input type="button" value="中止" @click="stop()">
        {{msg}}
    </div>
    <script>
        
        let vm = new Vue({
            el: "#app",
            data: {
                msg: '就算大雨让这座城市颠倒,我会给你怀抱',
                flag: null  //设置定时器
            },
            methods: {
                // 使用 => 箭头函数 this. 会直接指向外部的 this
                start() {
                    this.flag = setInterval(() => {
                        // 获取第一个字
                        var start = this.msg.substring(0, 1);
                        // 获取第一个字后的所有字
                        var end = this.msg.substring(1);
                        // 重新给msg赋值,方便下一次循环
                        this.msg = end + start; 
                    }, 500);
                },
                stop(){
                    clearInterval(this.flag); //清除定时器
                    // 重新设置定时器状态
                    this.flag = null 
                }
            }
        })
    </script>

1644670060578.gif