jQuery / javascript event.timestamp不起作用

时间:2015-12-16 22:07:41

标签: javascript jquery events timestamp


我正在做练习,但是e.timestamp返回最初返回“-xxxx”值,所以date.toDateString总是返回“Thu Jan 01 1970 click”。 我也在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>');
    });

});

1 个答案:

答案 0 :(得分:6)

这很可能是由于Chrome和Opera中的最新版(自49版)change to Event.timeStamp。这些浏览器返回DOMHighResTimeStamp而不是DOMTimeStamp,这意味着该值不再是一个纪元时间值,不应转换或与日期值进行比较。

BTW,该代码段在Firefox中从未起作用,因为它不会返回点击事件的纪元时间戳。

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

如果您想要发生事件的纪元时间实例,那么在处理程序中使用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>');
});