javascript - 测量鼠标点击时间长度的计时器

标签 javascript p5.js

我使用可以从 vanilla js 找到的示例将其放在一起,因为我无法准确找到我需要的 p5 中已经完成的内容。

它正在做我想要它做的事情,即在 mousePressed 和 mouseReleased 之间给我一个时间。

问题:我的方法有效吗?在阅读有关计时器的其他评论后寻找一些专家建议...不希望计时器在后台运行,因为我没有正确处理它...

let timeTaken = 0;
let result = 0;
let timer;

function setup() {
  createCanvas(500,500);
}

function draw() {
  background('black');
  fill('white');
  textSize(15);  
  text("timeTaken: "+timeTaken,20,20);
  textSize(60);
  text(result,100,100);
}

function mousePressed() {
  result = 0;
  timeTaken = 0;
  if (timer) {
      clearInterval(timer);
  }
  timer = setInterval(()=>{timeTaken++;}, 1);  
}

function mouseReleased() {
  clearInterval(timer);
  result = timeTaken;
}

最佳答案

您根本不需要计时器,尤其是因为无法保证当您要求触发计时器时计时器会被触发。因此,如果您以 1 毫秒的间隔启动计时器,则在 10 毫秒的时间内可能只会调用它两到三次,因此最终计数为 2 或 3,而不是 10。(事实上,计时器为 clamped ,如果您安排 1 毫秒回调,则在五次回调后,浏览器应该限制它并使其等待至少 4 毫秒。

只需记录 mousedown 上的当前时间,然后用 mouseup 上的当前时间减去它,就可以知道鼠标按下的时间(以毫秒为单位):

let down;
let timeTaken = 0;

function mousePressed() {
  down = Date.now();
}

function mouseReleased() {
  timeTaken = Date.now() - down;
}

实例:

let down;
let timeTaken = 0;

function mousePressed() {
  down = Date.now();
}

function mouseReleased() {
  timeTaken = Date.now() - down;
}

const target = document.getElementById("target");
target.addEventListener("mousedown", mousePressed);
target.addEventListener("mouseup", function() {
  mouseReleased();
  console.log(`Time taken: ${timeTaken}ms`);
});
#target {
    user-select: none;
}
<div id="target">Click me<div>


¹ 关于夹紧,您可以在此处查看它的实际操作:

const now = typeof performance !== "undefined" && performance.now ? performance.now.bind(performance) : Date.now.bind(Date);
let last = now();
let counter = 0;
const entries = [];
const timer = setInterval(() => {
    const n = now();
    entries.push(n - last);
    last = n;
    if (++counter > 15) {
        clearInterval(timer);
        for (const entry of entries) {
            console.log(entry + "ms");
        }
    }
}, 1);
.as-console-wrapper {
    max-height: 100% !important;
}

关于javascript - 测量鼠标点击时间长度的计时器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56557493/

相关文章:

javascript - 在 angularjs 中使用工厂分配完成标志

javascript - 使用 jQuery/Ajax 投票数据库

javascript - 时刻时区,设置默认时区

javascript - P5.js 向 Azure 自定义视觉发送请求

javascript - 需要帮助使用 JavaScript 和 P5 让一个对象从另一个对象上反弹

javascript - 使用 GEOFirestore 获取附近的 GEO 结果

javascript - freemarker、java和javascript之间的引用问题

使用 P5.js lib 的 javaScript 气泡类示例,代码在一段时间后崩溃。我该如何规避和克服这一点?

javascript - p5.j​​s createCanvas 未定义错误。 Uncaught ReferenceError

javascript - 如何将此处理代码转换为 P5.js