我一直在玩使用HTML和Javascript / jQuery编写视频游戏,我正在处理一种情况,即点击一个对象可以有多种效果,从打开菜单到播放动画到触发其他事件撤消以前的操作并删除其他事件处理程序。
我看待它的方式有两种主要方法可以处理它。我可以创建一个大事件处理程序来执行所有操作,并根据我在页面中监视的各种状态决定要执行的操作。 e.g:
$btn_Foo.on('click', function() {
if(condition_A) {
Do_Action_A();
} else {
Do_Action_B();
}
if(condition_B) {
Do_Action_C();
}
});
另一个是我将每个进程发送给可以关闭和打开的不同事件处理程序,并且状态检查可能只发生在每个单独的函数中。 e.g:
$btn_Foo.on('click', Do_Action_A);
$btn_Foo.on('click', Do_Action_C);
//In some other function
if(!condition_A) {
$btn_Foo.off('click', Do_Action_A);
$btn_Foo.on('click', Do_Action_B);
}
我更倾向于第二种选择,主要是因为我正在使用模块化和更灵活的设计构建我的javascript,但我担心的主要问题是拥有许多不同的事件处理程序可能会导致一些明显的性能问题。我可能在一个对象上有多达十几个这样的事件处理程序(并且至少有一百个这样的对象),所以我不知道调用多次事件处理程序的开销是否会产生重大影响。如果没有,那么我将选择2。
编辑2:在阅读了关于该主题的更多信息之后,我意识到提到我正在使用事件委托来附加事件处理程序是很重要的,因此关于事件附加到数千个元素的位可能不是问题。尽管如此,我最初担心的可能仍有十几个这样的事件处理程序。