javascript - 尝试制作自动点击器的 javascript 新手
问题描述
我能够让空格键激活我制作的简单按钮,但我在使用 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
是一个局部变量。您应该var
在程序开始时将其定义为mousex
和mousey
。按照目前的情况,每次运行onkeydown
它都会创建一个间隔的新实例,检查是否取消它,然后丢弃引用。如果将其设为全局变量,则可以保留引用,以便随时取消它。
有了这个,您还应该考虑何时运行间隔。如果您保持原样,您的旧间隔将被新间隔覆盖,然后您可以检查以取消。你应该做的是这样的:
var timer = null;
document.body.onkeydown = function(e) {
if (/* start timer */ && timer == null) {
timer = setInterval(/* ... */);
} else if (/* end timer */) {
clearInterval(timer);
timer = null;
}
}
推荐阅读
- powershell - ExpandString 中断 EOL
- xslt - 如何使用 Saxon HE 10.2 设置语言数据?
- hibernate - 使用“gradlew build”从源代码构建 Hibernate 失败
- python - 戴尔 XPS 9300 上的 TensorFlow
- r - R:按名称对命名向量中的元素进行排序
- c# - 我使用 httpclient 的 API 发布请求返回 200 但邮递员返回 201
- android - 无法从命令在模拟器中运行反应本机项目
- python - 通过三种方法将 Django 应用部署到 Azure 失败(创建/访问 tmp 文件的问题)
- python - 如何在 codalab 上运行 python 文件?
- google-apps-script - 如何使用 OAuth2 库从 Google App Script 发布推文?