2015-12-16 203 views
2


我在做一个练习,但e.timestamp返回最初返回“-xxxx”值,所以date.toDateString总是返回“Thu Jan 01 1970 click”。 我也在w3schools上寻找答案,但其解决方案也无法正常工作!我不明白为什么TT_____TT
我使用最新版本的Chrome!
此代码适用于Microsoft Edge。我怎样才能使它通用?
谢谢你们:)jQuery/javascript event.timestamp does not work

$(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>'); 
    }); 

}); 
+0

http://stackoverflow.com/questions/18197401/javascript-event-timestamps-not-consistent – rahul

+0

什么是你得到的错误? – void

+0

那个date.toDateString总是返回“Thu Jan 01 1970 click”!相反,点击日期! – ProtoTyPus

回答

6

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

该代码片段在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>'); 
}); 

然而,大多数usecases实际需要来衡量的时候相比,在另一个时间点发生的事件之间的时间。在这种情况下,我建议使用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>'); 
}); 
+0

不错的工作@majid! – Ehsan