如何模拟Event.timeStamp

Ray*_*nos 13 javascript dom dom-events dom4

Event.timeStamp

timeStamp属性必须返回它初始化的值.创建事件时,必须将属性初始化为自1970年1月1日00:00:00 UTC以来经过的毫秒数.

可以相互捕获new Event并相应document.createEvent地设置timeStamp,但是如何拦截浏览器创建和分派的事件?

可以向document侦听"每个"事件类型的事件添加一个事件监听器(捕获阶段),并将timeStamp写入接近调度时间但这将是一个丑陋的黑客.

  • 有没有更好的方法来效仿Event.timeStamp
  • 拦截new Event/ new CustomEvent和是否有潜在的陷阱document.createEvent
  • 是否有其他方式以编程方式创建事件?
  • 添加事件侦听器documenttimeStamp尽可能早地手动设置是否存在任何潜在问题?

jor*_*aul 1

另一种选择是在处理程序中添加时间戳。据推测,只有您编写的代码实际上关心时间戳,并且由于您可以控制您编写的代码,因此您可以使用自己的“监听”辅助函数。就像是:

var myAddListener = function(name, fn, scope){
    addEventListener(name, function(e){
        if(!e.timeStamp) e.timeStamp = +new Date;
        fn.apply(scope || null, arguments);
    });
}
Run Code Online (Sandbox Code Playgroud)

只要附加了与时间戳相关的代码,就可以了。请注意,我在其中添加了一个“范围”参数...这是在类实例中使用侦听器时保留“this”的一种便捷方法。