javascript - 为任何事件处理程序仅触发一次绘制
问题描述
我有一个相当复杂的 JavaScript 单页应用程序,它有一个主画布,需要重新绘制以响应用户的各种输入。许多事件被注册到各种 DOM 元素中,每个这样的事件都有可能触发draw()
. 目前,我只是draw()
在有需要触发它的条件时执行,但这往往会导致draw()
同一事件快速连续发生多个调用。
有什么模式或机制可以用来解决这个问题吗?
理想情况下,我希望触发条件只设置一个标志,如果设置了标志,则在事件处理结束时进行抽奖。手动执行此操作需要修改数十个注册事件
解决方案
我认为这样的模式应该可以解决问题。
EventTarget.prototype.addEventListenerRunOnce = function(name, callback) {
const eventWrapper = (event) => {
this.removeEventListener(name, eventWrapper);
callback(event);
};
this.addEventListener(name, eventWrapper);
};
推荐阅读
- python - 可以在 odoo 视图中显示当前的 partner.id
- python - 如何从兄弟类配置 tkinter wiget 中的文本?
- python - Django - 如何根据从模板中选择下拉菜单中选择的选项更改视图
- c++ - constexpr 变量 'params' 必须由常量表达式初始化
- sql - 在 ibm db2 中创建数据库时出错
- flutter - Flutter - onDragStarted 时获取 Draggable 触摸点详细信息
- ios - Azure Devops Pipeline MacOS VM 映像似乎没有任何 iOS 模拟器
- android - 在 null 上调用了方法“[]”。接收方:null 尝试调用:[](“DateTime”实例)
- docker - XDebug 只为 CLI 脚本而不是浏览器请求写入日志
- flutter - 如何知道新推送的屏幕何时在 Flutter 上完全过渡?