首先要区分setInterval和setTimeout

使用场景:

1.一般情况下 setTimeout() 用于延迟执行某方法或功能;

2.setInterval() 则一般用于刷新表单,对于一些表单的假实时指定时间刷新同步。

定义:

1.setInterval() : 用于按照指定的周期(以毫秒计)来循环调用函数或计算表达式,直到 clearInterval() 被调用或窗口关闭

2.setTimeout(): 用于在指定毫秒数后再调用函数或者计算表达式(以毫秒为单位)

区别总结:

setTimeout() 方法只运行一次,也就是说当达到设定的时间后就开始运行指定的代码,运行完后就结束了,次数是一次。

setInterval() 是循环执行的,即每达到指定的时间间隔就执行相应的函数或者表达式,只要窗口不关闭或 clearInterval() 调用就会无限循环下去。

缺点总结:

setInterval缺点:

1.使用setInterval时,某些间隔会被跳过;即使setInterval调用的方法报错了,他仍然会继续执行。

2.无视网络延迟,可能多个定时器会连续执行

setTimeout缺点:

1.不能按时执行

2.执行动画时它通过设定间隔时间来不断改变图像位置,达到动画效果。但是容易出现卡顿、抖动的现象,原因是: settimeout 任务被放入异步队列,只有当主线程任务执行完后才会执行队列中的任务。

uniapp上使用:

//uniapp中的具体用法:我这里使用到了setInterval
data() {
		return {
			timer: null//定时器名称
		};
	},
//一般在页面需要的地方使用,这里我是放在了onshow()里
onShow() {
	// console.log('onshow');
	 this.timer = setInterval(function() {
		// 放入你自己的业务逻辑代码
 	}, 3000);
},
//uniapp中onHide()能监听到页面离开
onHide() {//离开页面前清除计时器
	// console.log('onHide');
	clearInterval(this.timer);
	this.timer = null;
},

这里我要说明一下,在uniapp 中要实现vue离开页面销毁定时器功能,百度了一大圈都说使用vue的beforeDestroy生命周期,如下:

//beforeDestroy为实例销毁之前调用
beforeDestroy() {
		if(this.timer) {
    	clearInterval(this.timer); //关闭
  	} 

结果,根本就没有用,依然关不掉,最后看到一个方法说是:通过$once这个事件侦听器器在定义完定时器之后的位置来清除定时器,如下:

const timer = setInterval(() =>{ // 某些定时器操作   }, 500);            

// 通过$once来监听定时器,在beforeDestroy钩子可以被清除。 
uni.$once('beforeDestroy', () => {                     
        clearInterval(timer);                                     
})

显然,对我这里并没有用,最后还是采用了 onHide()这个页面生命周期才能及时清除

补充:uni-app 倒计时计时器

<text class="red">剩余时间:<text>{{remaining}}</text></text>
export default {
		data() {
			return {
				remaining: '', //显示剩余时间
				remainingd: ''  //数据返回时间秒
			}
		},
		onLoad() {
			uni.showLoading(); //数据加载中
			this.getmsglist();//第一次加载数据
		},
		methods: {
			//获取列表信息
			getmsglist: function() {
					var _self = this;
				_self.goodsid = uni.getStorageSync('goodsid');
				uni.request({
					url: _self._apiurl   "/app/goods/getgoodsdetail",
					method: 'POST',
					header: {
						'content-type': 'application/x-www-form-urlencoded'
					},
					data: {
						openid: _self.openid,
						token: _self.token,
					},
					success: (res) => {
						console.log(res);
						var data = res.data;
						_self.remainingd = data.data.timestamp;
						_self.jishiqi();//执行一次倒计时,因为进入页面有等待
						
						setInterval(function() {
							_self.jishiqi();
						}, 1000)
 
						uni.hideLoading(); //关闭加载
 
 
					}
				})
			},
			//倒计时计时器
			jishiqi: function() {
				var dj = this.remainingd;
				if (dj <= 0) {
					this.remaining = "已过期";
				} else {
					var ddf = this.djs(dj); //格式化过后的时间
					this.remaining = ddf;
					//当前时间减去时间
					dj = dj - 1;
					this.remainingd = dj;
				}
 
			},
			//得到的秒换算成时分秒
			djs: function(ms) { 
				var h = parseInt(ms / (60 * 60));
				var m = parseInt((ms % (60 * 60)) / 60);
				var s = (ms % (60 * 60)) % 60;
				return h   ":"   m   ":"   s;
			},
		}
	}

总结

到此这篇关于uniapp中使用计时器setInterval的文章就介绍到这了,更多相关uniapp使用计时器setInterval内容请搜索Devmax以前的文章或继续浏览下面的相关文章希望大家以后多多支持Devmax!

uniapp中使用计时器setInterval的场景与方法的更多相关文章

  1. xcode – 当NSMenu在Swift中打开时,NSTimer不会触发

    这不是什么大不了的事,但我不希望用户与会话混淆,如果他们看到计时器停机就会挂起.解决方法您只需将计时器添加到主runloop,如下所示:斯威夫特3Swift2.x

  2. xcode – Swift计时器,以毫秒为单位

    我想每毫秒更改一次计时器,但它不能按预期工作.结果是计时器在毫秒部分(00:100)中更改为100,然后更改为01:00=40实际秒邓肯方法:结果:456680125.54539第一次打印解决方法正如Martin在评论中所说,定时器的分辨率为50-100毫秒(0.05到0.1秒).尝试运行时间间隔短于此的计时器将无法提供可靠的结果.此外,计时器不是实时的.它们取决于它们所连接的运行循环,如果运行循

  3. 在iOS应用程序中使用dispatch_source_t无法在GCD块中运行计时器

    我想在GCD块中创建一个定时器来将其用作后台任务.但是,当我看到定时器火从来没有.这是我的代码:那么这是什么问题?解决方法您必须使您的dispatch_source_t成为一个类属性或实例变量,因此它不会超出范围.如果你这样做,你的代码可以正常工作,例如:另请注意,如果您希望在启动后台进程后更改BOOL的值,您可能也希望将其设置为类属性,如上所示.我也将其更名为观察消息,使其目的更为简单.

  4. 显示在视图控制器之间保留的iOS应用程序的计时器

    我一直试图通过使用NSTimer在我的应用程序的左下角显示一个计时器,并将“经过时间”显示为左下角的UILabel,但它并没有为我工作.计时器实际上工作,但我不能让它由按钮触发.我正在尝试让计时器继续运行,而不是在进入下一个storyboard/xib文件时重新启动.解决方法要在按下按钮时实现计时器操作,您需要在IBAction方法上编写它,如:要存储以前的值,可以使用NSUserDefaults或sqlite数据库.为此,我建议NSUserDefaults.更改aTime方法,如:

  5. ios – NSTimer不会因无效而停止

    我像这样添加计时器这是我班级的NSTimer属性.然后我点击按钮就停止它fbt它是我班级的实例.如果我只调用invalidate然后它不会停止,但如果我将它设置为nil然后我得到了EXC_BREAKPOINT这里选择器中的repeatTim方法的代码我试着调用init并使其无效它也不会停止计时器.解决方法阅读NSTimer的文档:Therearethreewaystocreateatimer:Us

  6. ios – 在发射开始后更改CAEmitterLayer的CAEmitterCell属性

    当我第一次设置发射器时,我可以这样做:但是说我创建了一个5秒后触发的计时器,我这样做:计时器触发,但CAEmitterCell的yacceleration不会更改.或者至少屏幕上的粒子发射没有任何变化.如何让CAEmitterCell尊重我对其属性所做的更改?解决方法这不是很明显,但这是解决方案:“cell”是这里给出的名字:

  7. ios – 如何在进入后台后杀死NSTimer并在应用程序恢复活动后创建新的计时器?

    或许我应该把所有与计时器相关的代码放在AppDelegate.swift中?

  8. ios – 如何维护两个不同设备之间的时钟会话?

    我正在研究iOS应用程序,它需要在接受两个设备用户时在两个设备之间维持时钟计时器会话?但我不确定如何在两台设备上都没有时间缺陷的情况下实现这一目标?

  9. ios – 如何在Swift中实现非常精确的计时?

    我正在开发一个具有琶音/排序功能的音乐应用程序,需要很高的计时准确性.目前,使用“Timer”我已经达到了平均抖动约为5ms的精度,但最大抖动约为11ms,这对于8号,16号音符的快速琶音来说是不可接受的.特别是第32条.我已经读过’CAdisplayLink’比’Timer’更准确,但由于它的准确度限制在1/60秒,看起来它的准确性不如我用Timer实现了.潜入CoreAudio是实现我想要的唯一途径吗?还有其他方法可以实现更精确的计时吗?

  10. 从零开始学Swift计时器App开发

    由于我们将从零开始学习,请在左侧窗口选则iOS/Application,右侧窗口选择EmptyApplication,点击Next,然后在ProductName项填入SwiftCounter,Language注意选择Swift,再点击Next,选择项目保存的路径,最后点击Create即可完成项目创建。后记通过完成此教程,我对Swift语言的理解也更进了一步。Swift是一门全新的语言,作为开发者,我们需要不断加深对这门语言的理解,并灵活使用语言提供的特性来编程。

随机推荐

  1. js中‘!.’是什么意思

  2. Vue如何指定不编译的文件夹和favicon.ico

    这篇文章主要介绍了Vue如何指定不编译的文件夹和favicon.ico,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教

  3. 基于JavaScript编写一个图片转PDF转换器

    本文为大家介绍了一个简单的 JavaScript 项目,可以将图片转换为 PDF 文件。你可以从本地选择任何一张图片,只需点击一下即可将其转换为 PDF 文件,感兴趣的可以动手尝试一下

  4. jquery点赞功能实现代码 点个赞吧!

    点赞功能很多地方都会出现,如何实现爱心点赞功能,这篇文章主要为大家详细介绍了jquery点赞功能实现代码,具有一定的参考价值,感兴趣的小伙伴们可以参考一下

  5. AngularJs上传前预览图片的实例代码

    使用AngularJs进行开发,在项目中,经常会遇到上传图片后,需在一旁预览图片内容,怎么实现这样的功能呢?今天小编给大家分享AugularJs上传前预览图片的实现代码,需要的朋友参考下吧

  6. JavaScript面向对象编程入门教程

    这篇文章主要介绍了JavaScript面向对象编程的相关概念,例如类、对象、属性、方法等面向对象的术语,并以实例讲解各种术语的使用,非常好的一篇面向对象入门教程,其它语言也可以参考哦

  7. jQuery中的通配符选择器使用总结

    通配符在控制input标签时相当好用,这里简单进行了jQuery中的通配符选择器使用总结,需要的朋友可以参考下

  8. javascript 动态调整图片尺寸实现代码

    在自己的网站上更新文章时一个比较常见的问题是:文章插图太宽,使整个网页都变形了。如果对每个插图都先进行缩放再插入的话,太麻烦了。

  9. jquery ajaxfileupload异步上传插件

    这篇文章主要为大家详细介绍了jquery ajaxfileupload异步上传插件,具有一定的参考价值,感兴趣的小伙伴们可以参考一下

  10. React学习之受控组件与数据共享实例分析

    这篇文章主要介绍了React学习之受控组件与数据共享,结合实例形式分析了React受控组件与组件间数据共享相关原理与使用技巧,需要的朋友可以参考下

返回
顶部