Javascript 如何测量mousedown和mouseup之间的毫秒数?
有没有办法测量鼠标按下和释放之间的毫秒数?您可以使用两个全局变量来记录mousedown和mouseup的时间,并有一个减法您可以创建一个闭包来共享两个变量,一个用于存储开始时间,另一个用于存储结束时间,然后在mouseup事件中,获得差异:Javascript 如何测量mousedown和mouseup之间的毫秒数?,javascript,mouseevent,Javascript,Mouseevent,有没有办法测量鼠标按下和释放之间的毫秒数?您可以使用两个全局变量来记录mousedown和mouseup的时间,并有一个减法您可以创建一个闭包来共享两个变量,一个用于存储开始时间,另一个用于存储结束时间,然后在mouseup事件中,获得差异: (function () { var element = document.getElementById('element'), start, end; element.onmousedown = function ()
(function () {
var element = document.getElementById('element'),
start, end;
element.onmousedown = function () {
start = +new Date(); // get unix-timestamp in milliseconds
};
element.onmouseup = function () {
end = +new Date();
var diff = end - start; // time difference in milliseconds
};
})();
检查此工作。当启动onmousedown时,您可以在窗口上挂起onmouseup事件。这样可以避免不必要的关闭
el.onmousedown = function () {
var time = new Date(); //time in milliseconds
window.onmouseup=function(){
var diff=new Date()-time;
window.onmouseup=null;
}
};
此处检查结果:tl;dr.答案和示例
- 通过从第二个事件的
属性中减去第一个事件的属性来获取两个事件之间的时间李>.timeStamp
- 不要试图通过在事件处理程序中创建
或调用new Date()
来获取事件发生的时间Date.now()
- 请注意,即使遵循此建议,在某些浏览器的旧版本中,如果事件处理程序的执行因某些不相关JavaScript的缓慢执行而延迟,也会得到错误的结果
const-button=document.getElementById(“按钮”);
让鼠标下移;
button.addEventListener('mousedown',()=>{
mousedownTime=newdate().getTime();
});
addEventListener('mouseup',function(){
const mouseupTime=new Date().getTime(),
时差=mouseupTime-mousedownTime;
警报(${timeDifference}ms`按下按钮);
});代码>
单击我
由于其他链接现在似乎已断开,至少在chrome上是这样,下面是一个简单的工作演示:
var开始时间;
window.startTimer=函数(){
开始时间=新日期();
}
window.reportTime=函数(){
警报(新日期()-startTime)
}
测量点击时间
我认为这是最优雅的方式:
function onMouseDown(e) {
window.onmouseup = function(e2) {
var diff = e2.timeStamp - e.originalEvent.timeStamp;
console.log(diff);
window.onmouseup = null;
};
}
new Date()
之前的+
有什么作用?@jsoldi:它只是进行类型转换(到数字),有关详细信息,请参见以下答案:如果浏览器支持它,Date.now()
将比实例化日期对象更好。但并非所有浏览器都会这样做。我不太想对它抛出-1,但我要说的是,通过创建新日期()
来获取事件发生的时间通常是一种不好的做法。请阅读事件的.timeStamp
属性,这样(至少在某些浏览器中)当事件发生时,如果您的一个或两个事件处理程序由于其他JavaScript正在执行而最终排队,则您的计时不会出现偏差。请参阅我的答案(),了解更多关于这一点的内容,并附上示例。@混淆Mr__C,以便元素
、开始
、和结束
名称不会泄漏到全局范围中。-1表示“避免不必要的闭包”(为什么?!),紧接着是使用闭包的代码段。