【问题标题】:jQuery/javascript event.timestamp doesnt workjQuery/javascript event.timestamp 不起作用
【发布时间】:2016-03-23 05:43:25
【问题描述】:


我正在做一个练习,但 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>');
    });

});

【问题讨论】:

标签: javascript jquery events timestamp


【解决方案1】:

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

顺便说一句,sn-p 代码在 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>');
});

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-07-26
    • 2014-11-29
    • 1970-01-01
    • 2016-09-02
    • 2012-09-12
    • 2012-09-09
    • 1970-01-01
    相关资源
    最近更新 更多