微信小程序--setTimeout

setTimeout

语法

setTimeout(function callback, number delay, any rest)

参数解释:

  • function callback:回调函数
  • number delay:延迟的时间,函数的调用会在该延迟之后发生,单位 ms。
  • any rest:param1, param2, …, paramN 等附加参数,它们会作为参数传递给回调函数。

返回值:

  • number:定时器的编号,这个值可以传递给 clearTimeout 来取消该定时。

作用

设定一个定时器。在定时到期以后执行注册的回调函数

海轰的理解:利用setTimeout函数,可以设置一定时间后执行一个函数

场景一

自定义函数

300ms后,打印字符“hello world”

     setTimeout(function(){
          console.log("hello world")
        //  可以自定义300ms后执行的操作 
        //   这里以打印字符串为例
      },300)

结果:

在这里插入图片描述

场景二:

使用现成的函数

300ms后,执行同页面下的一个函数(以自定义函数print()为例)

  print:function(){
      console.log("hello world")
  },
  // 假设setTimeout函数在onLoad中触发
  onLoad:function(){
      let k=this
      setTimeout(k.print,300)
  },

结果:
在这里插入图片描述

场景三

带参数(一个参数)

  print:function(e){
      console.log("hello world "+e)
  },
  onLoad:function(){
      let k=this
      setTimeout(k.print,300,"haihongPro")
  },

结果:
在这里插入图片描述
带参数(两个参数)

  print:function(e,f){
      console.log("hello world "+e+f)
  },
  onLoad:function(){
      let k=this
      setTimeout(k.print,300,"haihongPro"," hh")
  },

结果:
在这里插入图片描述
多个参数以此类推

场景三

清除定时器

setTimeout还有一个返回值,也就是定时器的编号,类型是number

测试代码:

       let a = setTimeout(function () {
            console.log("hello world")
        }, 300)
        let b = setTimeout(function () {
            console.log("hello world")
        }, 300)
        console.log(a)
        console.log(b)

结果:
在这里插入图片描述
可以看出:其实每一个定时器都是有一个编号id的

那么有什么作用呢?

答:可以通过这个id来消除这个定时器。【虽然定时器是在一定时间后执行某一个函数,只执行一次,但是每次触发该函数时,都会产生调用,有时我们只需要在程序生命周期里只需执行唯一的一次,所以就需要执行一次后进行删除,这时就需要用到clearTimeout】

测试代码:

        let a = setTimeout(function () {
            console.log("hello world")
        }, 300)
        clearTimeout(a)// 清除定时器a

场景四

实现每隔一段时间调用某一个函数(递归)

比如:每隔3000ms,打印字符串“HaihongPro”

wxml页面:

<button bindtap="test">测试</button>

js页面:

  test:function(){
        let k=this
        let a=setTimeout(function(){
            console.log("HaihongPro")
            k.test()//递归
        },3000)
    },

点击按钮后,便可以实现每隔3000ms打印字符串了

结果:

在这里插入图片描述

说明

参考:https://developers.weixin.qq.com/miniprogram/dev/api/base/timer/setTimeout.html

  • 4
    点赞
  • 21
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
微信小程序中,requestAnimationFrame方法的兼容性存在问题。微信小程序本身不提供requestAnimationFrame方法,而是将其实现放在了webgl canvas的上下文中。因此,只有2.7.0版本以后的机型才能使用requestAnimationFrame方法。如果你想在使用普通的canvas时,也使用requestAnimationFrame来控制画面渲染刷新,可以使用setInterval或者setTimeout来实现降级处理。以下是降级处理的代码: ```javascript (function() { var lastTime = 0; // 兼容各种浏览器 var vendors = ['ms', 'moz', 'webkit', 'o']; for(var x = 0; x < vendors.length && !window.requestAnimationFrame; x++) { window.requestAnimationFrame = window[vendors[x]+'RequestAnimationFrame']; window.cancelAnimationFrame = window[vendors[x]+'CancelAnimationFrame'] || window[vendors[x]+'CancelRequestAnimationFrame']; } // 降级处理 if (!window.requestAnimationFrame) { window.requestAnimationFrame = function(callback, element) { // 保证如果重复执行callback的话,callback的执行起始时间相隔16ms var currTime = new Date().getTime(); var timeToCall = Math.max(0, 16 - (currTime - lastTime)); var id = window.setTimeout(function() { callback(currTime + timeToCall); }, timeToCall); lastTime = currTime + timeToCall; return id; }; } if (!window.cancelAnimationFrame) { window.cancelAnimationFrame = function(id) { clearTimeout(id); }; } }()); ``` 这段代码可以使得在微信小程序中使用requestAnimationFrame方法进行画面渲染刷新。所以在微信小程序中,要使用requestAnimationFrame方法,需要进行降级处理。同时,需要注意的是,requestAnimationFrame和setTimeout不是一回事,根据其定义,可以在不同场景下使用。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* [微信小程序webgl+Three.js初试水(一)](https://blog.csdn.net/sinat_33342614/article/details/99889762)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 50%"] - *2* *3* [从微信小程序重力感应API到requestAnimationFrame探索实现](https://blog.csdn.net/weixin_33747129/article/details/89175163)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

海轰Pro

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值