我想跟踪用户点击按钮所需的时间。我已经解决了这个问题,但如果有更好的解决方案的话,我会想要一个更好的解决方案。这是我的:
export class MainComponent implements OnInit {
timer : number = 0;
intervalId : number;
constructor() {
this.intervalId = setInterval(() => {
this.timer++;
}, 1000);
}
ngOnInit() {}
buttonClick = function() {
alert(this.timer);
this.timer = 0;
}
}
3条答案
按热度按时间9jyewag01#
使用
performance.now()
获得准确的时间戳(或回退到new Date().getTime()
),并计算UI更新回调的差异(通过setInterval
)。不要使用setInterval
本身来计算时间--你不能假设setInterval
调用实际上每1000 ms被精确地调用一次。注意:我还将定时器逻辑移到了
ngOnInit
函数中,而不是constructor
。xzv2uavs2#
首先,我们在typescript中声明成员函数的方式有点不同,所以buttonClick应该是这样的
正如@Dai的评论中提到的,在开始时(在ngOnInit)获取系统时间,并从单击时的系统时间中减去它,将需要更少的操作,并且更准确。
编辑:我编辑了答案,以显示您必须使用localStorage来持久化值。这与上面的答案类似,但是使用了idomatic typescript。我想前面的答案有很多es 5的经验,并诉诸于这些方法(没有错)。我发现这种风格更容易和更清晰。我会重新采取一个Angular 教程。尝试在他们的网站上浏览英雄,并使用带有Angular Essentials插件的Visual Studio代码,因为这将正确地Lint和格式化您的代码,以便您可以习惯惯用的类型脚本。干杯
e5njpo683#
你可以用下面的代码代替增量计时器。当标签处于非活动状态时,计时器的增量将被更改。我以最有效的方式创建了一个秒表。您可以将一个选项卡移动到另一个选项卡。时间计数值不会改变。您可以重置,暂停和播放。您可以访问链接了解详情。
https://stackblitz.com/github/Ashraf111/StopWatchWhenTabActiveAndInactive