Timer Fired 事件未决
Timer Fired event is pending
我有一些滑动手势的代码,主要部分是:
this.topSlide = this.elementRef.nativeElement.querySelector('.product_rate_slide');
if (this.topSlide) {
this.topSlide.addEventListener('touchstart', this.handleTouchStart);
this.topSlide.addEventListener('touchmove', this.handleTouchMove);
this.topSlide.addEventListener('touchend', this.handleTouchEnd);
}
这是 TouchEnd 处理程序的一部分:
private handleTouchEnd = (evt) => {
if (this.left > 150) {
const rightInterval = setInterval(() => {
this.left += 30;
if (this.left > 500) {
clearInterval(rightInterval);
this.removeTopSlide();
this.addListener();
this.slideSwiped.emit(evt);
}
this.cdr.detectChanges();
}, 17);
setInterval 中的代码每 2 秒调用一次(注意间隔设置为 17 毫秒)
这在快速机器上工作正常,当 运行 在真实移动设备上(使用 Samsung Galaxy S8 测试)或设置 Chrome 性能 CPU 节流到 6 倍减速时会出现问题.
超时更 'request',如果设备太忙于做其他事情,比如重新绘制 DOM 并且速度不够快,无法跟上,你的延迟时间会比你长想要.
所以您可能需要在慢速设备上做一些不同的事情。除此之外:最好使用 setTimeout 而不是 setInterval,在第一次调用完成时设置一个新的超时时间。所以事件不会叠加并同时被触发。
参考(检查:延误时间超过指定时间的原因):
https://developer.mozilla.org/en-US/docs/Web/API/WindowOrWorkerGlobalScope/setTimeout#Reasons_for_delays_longer_than_specified
我有一些滑动手势的代码,主要部分是:
this.topSlide = this.elementRef.nativeElement.querySelector('.product_rate_slide');
if (this.topSlide) {
this.topSlide.addEventListener('touchstart', this.handleTouchStart);
this.topSlide.addEventListener('touchmove', this.handleTouchMove);
this.topSlide.addEventListener('touchend', this.handleTouchEnd);
}
这是 TouchEnd 处理程序的一部分:
private handleTouchEnd = (evt) => {
if (this.left > 150) {
const rightInterval = setInterval(() => {
this.left += 30;
if (this.left > 500) {
clearInterval(rightInterval);
this.removeTopSlide();
this.addListener();
this.slideSwiped.emit(evt);
}
this.cdr.detectChanges();
}, 17);
setInterval 中的代码每 2 秒调用一次(注意间隔设置为 17 毫秒)
这在快速机器上工作正常,当 运行 在真实移动设备上(使用 Samsung Galaxy S8 测试)或设置 Chrome 性能 CPU 节流到 6 倍减速时会出现问题.
超时更 'request',如果设备太忙于做其他事情,比如重新绘制 DOM 并且速度不够快,无法跟上,你的延迟时间会比你长想要.
所以您可能需要在慢速设备上做一些不同的事情。除此之外:最好使用 setTimeout 而不是 setInterval,在第一次调用完成时设置一个新的超时时间。所以事件不会叠加并同时被触发。
参考(检查:延误时间超过指定时间的原因): https://developer.mozilla.org/en-US/docs/Web/API/WindowOrWorkerGlobalScope/setTimeout#Reasons_for_delays_longer_than_specified