javascript 尝试制作自动点击器的新手

New to javascript trying to make an autoclicker

我能够获得 space 条来激活我制作的简单按钮,但我在使用 setInterval() 循环时遇到问题。是因为我使用的 eventFire 机制吗?在我努力学习的过程中,欢迎任何帮助或建设性的批评。谢谢你的时间。

编辑:我找到了解决方案,因为我显然错误地使用了 setInterval 函数。但是,我仍然遇到使用 clearInterval(timer) E 热键停止 setInterval 循环的问题。这是更新后的代码。

"use strict";
// used for Tracking Mouse Position which I will implement later
let mousex;
let mousey;

// Simple Button that logs the amount of times pressed and triggers an animation
function button() {
  const button = document.querySelector(".button");

  function buttonClassRemove() {
    button.classList.remove("active");
  }

  function delay(time, inputFunction) {
    let milliseconds = time;
    setTimeout(function () {
      inputFunction();
    }, milliseconds);
  }
  let i = 0;
  button.addEventListener("click", function () {
    i = i + 1;
    console.log(`Button pressed ${i} times`);
    button.classList.add("active");
    delay(100, buttonClassRemove);
  });
}
// Simulates event
function eventFire(el, etype) {
  if (el.fireEvent) {
    el.fireEvent("on" + etype);
  } else {
    var evObj = document.createEvent("Events");
    evObj.initEvent(etype, true, false);
    el.dispatchEvent(evObj);
  }
}

function autoClicker() {
  document.addEventListener("mousemove", () => {
    // Tracking Mouse Position
    mousex = event.clientX; // Gets Mouse X

    mousey = event.clientY; // Gets Mouse Y
    // console.log([mousex, mousey]); // Prints data
  });

  document.body.onkeydown = function (e) {
    // Simulates click mouse event
    // and then loop that functionality with the setInterval function
    let timer = setInterval(function () {
  eventFire(document.getElementById("button1"), "click");
}, 100);

    if (e.keyCode == 32) {
      timer;
      console.log("Space pressed");
    } else if (e.keyCode == 69) {
      // Cancels autoclicker setInterval function
      clearInterval(timer);
      console.log("E pressed");
    }
  };
}

autoClicker();
button();

您的问题是 timer 是局部变量。您应该在程序开始时用 varmousexmousey 一起定义它。按照目前的情况,每次 运行 onkeydown 它都会创建一个新的间隔实例,检查是否取消它,然后丢弃引用。如果你把它做成一个全局变量,那么你可以保留引用,这样你就可以随时取消它。

有了这个,您还应该考虑 运行间隔时间。如果您保持原样,您的旧间隔将被新间隔覆盖,然后您才能检查取消。你应该做的是这样的:

var timer = null;
document.body.onkeydown = function(e) {
    if (/* start timer */ && timer == null) {
        timer = setInterval(/* ... */);
    } else if (/* end timer */) {
        clearInterval(timer);
        timer = null;
    }
}