由于主线程正忙,Angular2 对“鼠标滚轮”输入事件的处理延迟了 x 毫秒

Posted

技术标签:

【中文标题】由于主线程正忙,Angular2 对“鼠标滚轮”输入事件的处理延迟了 x 毫秒【英文标题】:Angular2 Handling of 'mouse wheel' input event was delayed for x ms due to main thread being busy 【发布时间】:2016-10-12 08:07:42 【问题描述】:

我将 Angular2 (r.2.0.0) 与 typescript (v.1.8.10) 一起使用。在工作滚动时,Chrome 什么也不做并发出警告(由于主线程忙,“鼠标滚轮”输入事件的处理延迟了 236 毫秒。考虑将事件处理程序标记为“被动”以使页面更具响应性。)

我正在使用 websocket 消息,滚动时无法触发接收到的消息。滚动作业完成后,所有收到的消息都开始处理。 我发现了类似的问题here,但它并没有解决我的问题。

html代码:

<canvas id="ReferenceLineCanvasName" (mousewheel)="OnMouseWheel($event)"  (dblclick)="OnMouseDoubleCliked()" (mouseout)="OnMouseUp($event)" (mousedown)="OnMouseDown($event)" (mouseup)="OnMouseUp($event)" (mousemove)="OnMouseMove($event)" class="reference_canvas_class"></canvas>

ts 代码:

public OnMouseWheel(event: any): any ...send message to server with websocket...



public SocketMessageReceived(stream: any): any .. not working while scrolling ...

【问题讨论】:

【参考方案1】:

您可以将所有 websocket 交互委托给 webworker,然后使用 rxjs 订阅 webworker 事件。 Web Worker 可以在接收和处理数据后发出事件信号。

服务可以包装此功能,根据请求返回 Observable 方法。

onMouseWell 也可以像这样包裹在 Observable 中:angular2 rxjs event handling

【讨论】:

以上是关于由于主线程正忙,Angular2 对“鼠标滚轮”输入事件的处理延迟了 x 毫秒的主要内容,如果未能解决你的问题,请参考以下文章

鼠标滚轮事件

如何在 Angular 2 / 4 中使用鼠标滚轮事件测试指令

PCB Genesis 鼠标滚轮缩放与TGZ拖放 插件实现

如何让DbGrid支持鼠标滚轮滚动

在 GLUT 中使用鼠标滚轮

html 禁用鼠标滚轮对网页滚动条的控制怎么实现?