admin管理员组文章数量:1388812
Event.timeStamp
The timeStamp attribute must return the value it was initialized to. When an event is created the attribute must be initialized to the number of milliseconds that has passed since 00:00:00 UTC on 1 January 1970.
One could trap both new Event
and document.createEvent
to set the timeStamp accordingly but how do you intercept events created and dispatched by the browser?
One could add an event listener (capture phase) to the document
that listens on "every" event type and write the timeStamp as close to the dispatch time but that would be an ugly hack.
- Are there any better ways to emulate
Event.timeStamp
? - Are there any potential traps with intercepting
new Event
/new CustomEvent
anddocument.createEvent
. - Are there other ways to create events programmaticly ?
- Are there any potential issues with adding event listeners to
document
and manually settingtimeStamp
as early as possible ?
Event.timeStamp
The timeStamp attribute must return the value it was initialized to. When an event is created the attribute must be initialized to the number of milliseconds that has passed since 00:00:00 UTC on 1 January 1970.
One could trap both new Event
and document.createEvent
to set the timeStamp accordingly but how do you intercept events created and dispatched by the browser?
One could add an event listener (capture phase) to the document
that listens on "every" event type and write the timeStamp as close to the dispatch time but that would be an ugly hack.
- Are there any better ways to emulate
Event.timeStamp
? - Are there any potential traps with intercepting
new Event
/new CustomEvent
anddocument.createEvent
. - Are there other ways to create events programmaticly ?
- Are there any potential issues with adding event listeners to
document
and manually settingtimeStamp
as early as possible ?
- 1 What is exactly the question? – gdoron Commented Apr 1, 2012 at 0:13
- 2 Out of curiosity, what are the benefits of emulating Event.timeStamp? – Caffeinated Commented Apr 1, 2012 at 0:19
- @Adel being able to figure out when an event occured. – Raynos Commented Apr 1, 2012 at 0:24
- 1 I too would like more clarity as to why you want to do this - I understand you want to know when the event occurred - but to what end? Can you give a use-case for this kind of functionality? – phatskat Commented Apr 19, 2012 at 18:58
- 1 @pomeh modern browsers have it, some browsers have bugs with their implementation, some browsers just don't have it – Raynos Commented Apr 23, 2012 at 15:27
2 Answers
Reset to default 4I couldn't find any place to intercept the creation of events that were generated by the browser rather than by user code. Your "ugly hack" seems to work okay though:
addEventListener("click", function (e) {
Object.defineProperty(e, "timeStamp", {
get: function () { return 4; }
});
}, true);
Obviously you'd have to call addEventListener a bunch of times with whatever event names you're interested in. Note that setting the timeStamp
directly has no effect, but defineProperty works. I only tested Chrome and IE9; I'm sure interop would be a mess since we're using a getter method.
Another option is to add the timestamp in the handler. Presumably, only code you write actually cares about the timestamp, and since you are in control of code you write, you can use your own "listen" helper function. Something like:
var myAddListener = function(name, fn, scope){
addEventListener(name, function(e){
if(!e.timeStamp) e.timeStamp = +new Date;
fn.apply(scope || null, arguments);
});
}
As long as your timestamp-dependant code is attached with this, you're fine. Note, I added a 'scope' argument while I was at it...it's a handy way of preserving 'this' when using listeners within class instances.
本文标签: javascriptHow to emulate EventtimeStampStack Overflow
版权声明:本文标题:javascript - How to emulate Event.timeStamp - Stack Overflow 内容由网友自发贡献,该文观点仅代表作者本人, 转载请联系作者并注明出处:http://www.betaflare.com/web/1744563885a2612928.html, 本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容,一经查实,本站将立刻删除。
发表评论