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
是局部变量。您应该在程序开始时用 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;
}
}
我能够获得 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
是局部变量。您应该在程序开始时用 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;
}
}