Javascript 为什么一个简单的JS自动点击器会破坏页面?

Javascript 为什么一个简单的JS自动点击器会破坏页面?,javascript,Javascript,我正在尝试创建一个自动单击脚本,该脚本在鼠标左键单击时运行(例如,按住鼠标左键单击会导致垃圾邮件单击),并希望它不仅在特定元素(例如button-2)上运行,而且在鼠标所在的任何位置运行。我想出了一个小剧本: var mouseDown=0; document.onmouseup=函数(){ --穆斯敦; } 函数printMousePos(事件){ ++穆斯敦; while(mouseDown){ document.elementFromPoint(event.clientX,event.c

我正在尝试创建一个自动单击脚本,该脚本在鼠标左键单击时运行(例如,按住鼠标左键单击会导致垃圾邮件单击),并希望它不仅在特定元素(例如
button-2
)上运行,而且在鼠标所在的任何位置运行。我想出了一个小剧本:

var mouseDown=0;
document.onmouseup=函数(){
--穆斯敦;
}
函数printMousePos(事件){
++穆斯敦;
while(mouseDown){
document.elementFromPoint(event.clientX,event.clientY).click();
}
}
文件。添加的文件列表(“mousedown”,printMousePos);
点击次数=0;
document.body.onclick=function(){
点击++;
document.body.innerText=单击;
}

  • 创建一个带有默认浏览器侦听器的
    鼠标对象
    
    “mousedown”
    “mouseup”
    “mouseover”事件
  • 然后将其他属性分配给您的Singleton:
    isDown
    (布尔值)来处理鼠标是向下还是向上
    autoClick
    (功能),该功能将在
    “鼠标悬停”
    事件中触发
  • forEach
    的方式将您的(“EventTypes”)方法分配给
    窗口。document
    对象
const鼠标={
mousedown(){this.isDown=true;},
mouseup(){this.isDown=false;},
鼠标悬停(ev){如果(this.isDown)this.autoClick(ev);},
};
对象。定义属性(鼠标{
伊斯敦:{
值:false,
可写:对,
},
自动单击:{
值:(ev)=>{
const ELFP=document.elementFromPoint(ev.clientX,ev.clientY);
ELFP.click();
}
}
});
Object.keys(Mouse).forEach(t=>document.addEventListener(t,Mouse[t].bind(Mouse));
//演示时间:
document.queryselectoral(“按钮”).forEach(EL=>
EL.addEventListener(“单击”,()=>console.log(EL.id))
);
按钮1

按钮2(鼠标向下)
将永远不会结束。由于循环阻塞了线程->不会处理任何事件->任何东西都不会改变
mouseDown
来打破循环。PS:永远不要在*
处理程序上使用
(除非你从内存中创建一个全新的元素。但即使这样也不是一个明智的想法)。您可能会将已添加的侦听器覆盖到该元素,这是荒谬的。使用
Element.addEventListener(“eventName”,f)
代替。PS:使用
textContent
代替
innerText
。是的,我知道它类似于innetHTML中的
。。。但是不要这样。@VLAZ谢谢你的评论!我会使用类似于
setInterval
then的东西吗?@RokoC.Buljan谢谢你的评论!如果需要附加侦听器,是否应该执行
document.documentElement.addEventListener
?另外,我将使用textContext。谢谢你的回答!我将如何使用它?你能举个例子吗?我想让它在按住鼠标的同时不断点击鼠标位置。我可以看到你得到鼠标的位置并点击元素,但是如何调用
mouse.autoClick
?@divinelemon请参见上面的示例:在
body
上按住Mousedown键,然后移动到按钮并查看console.log以生成元素ID-与生成元素ID的默认单击处理程序相同。太棒了!然而,我希望它不断地点击按钮;例如,当您将鼠标放在第一个按钮上时,您应该会在控制台中看到垃圾邮件“a”。如果你能补充这一点,我将很高兴地将此作为答案!谢谢@divinelemon现在我看到了您所追求的——添加了另一个更简单的示例。将代码粘贴到那些网站开发人员控制台中-并享受乐趣。当你意识到最高分数总是比你可能达到的更高时,不要难过:
topCoreResult=yourScore+randomFloat
(是的,分数没有存储在任何数据库中,只是一个点击诱饵);)再次感谢!我会接受这个答案。有没有办法让它适用于所有元素,而不仅仅是按钮?谢谢