2015-12-16 200 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