jQuery/javascript event.timestamp不起作用

jQuery/javascript event.timestamp doesnt work

本文关键字:timestamp 不起作用 event javascript jQuery      更新时间:2023-09-26


我正在做一个练习,但e.timestamp返回最初返回"-xxxx"值,所以date.toDateString总是返回"1970年1月1日星期四点击"。我也在w3schools上寻找答案,但它的解决方案也不起作用!我不明白为什么TT _____ TT
我使用的是最新版本的Chrome
此代码适用于Microsoft Edge。我怎样才能使它具有普遍性
谢谢大家:)

$(function() {
    $('li').on('click', function(e) {
        $('li span').remove();
        var date = new Date();
        date.setTime(e.timeStamp);
        var clicked = date.toDateString();
        $(this).append('<span class="date">' + clicked + ' ' + e.type + '</span>');
    });
});

这很可能是由于Chrome和Opera中最近(自版本49以来)对Event.timeStamp进行了更改。这些浏览器返回的是DOMHighResTimeStamp而不是DOMTimeStamp,这意味着该值不再是epoch时间值,不应转换或与Date值进行比较。

顺便说一句,这个代码片段从未在Firefox中工作过,因为它不会为点击事件返回epoch时间戳。

我建议阅读上面的文章。但总的来说,Event.timeStamp的行为在浏览器和事件类型之间是不同的,在某些浏览器中也可能受到NTP时间偏移的影响。因此,正确使用它相当棘手。

如果您想要事件发生的epoch时间实例,那么只在处理程序中使用Date.now()是最安全的。它损失了一些处理时间,但对于许多用例来说是可以接受的:

$('li').on('click', function(e) {
   var clicked = (new Date()).toDateString();
   $(this).append('<span class="date">' + clicked + ' ' + e.type + '</span>');
});

然而,大多数用例实际上需要测量事件发生与另一个时间点之间的时间。在这种情况下,我建议使用performance.now(),它是一个高分辨率的单调时钟。

var startTime = performance.now();
$('li').on('click', function(e) {
   var delta = performance.now() - startTime;
   $(this).append('<span class="date">' + delta + ' ms ago, ' + e.type + '</span>');
});