Loading [MathJax]/jax/output/CommonHTML/config.js
前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >JS如何模拟鼠标点击X,Y坐标

JS如何模拟鼠标点击X,Y坐标

作者头像
一个会写诗的程序员
发布于 2018-10-09 04:24:52
发布于 2018-10-09 04:24:52
16.1K00
代码可运行
举报
运行总次数:0
代码可运行

现在我有个窗口坐标X,Y. 如何利用JS点击该坐标?

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
document.body.onclick = function(){
 e = arguments[0];
 var dt = e.target,stag = dt.tagName.toLowerCase();
 document.getElementById("out").innerHTML = stag;
};
var simulateClick = function(){
 var evt = document.createEvent("MouseEvents");
 evt.initMouseEvent("click", true, true, window, 0, 0, 0, 80, 20, false, false, false, false, 0, null);
 document.body.dispatchEvent(evt);
}
simulateClick();//Why it can not show "input" ?

https://developer.mozilla.org/zh-CN/docs/Web/API/Document/createEvent

遍历dom元素,记录每个元素的坐标,找到离(x,y)最近的且z-index最大一个元素,模拟这个dom元素的点击

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
            function imitateClick(oElement, iClientX, iClientY) {
                var oEvent;
                if (document.createEventObject) { //For IE
                    oEvent = document.createEventObject();
                    oEvent.clientX = iClientX;
                    oEvent.clientY = iClientY;
                    oElement.fireEvent("onclick", oEvent);   
                } else {
                    oEvent = document.createEvent("MouseEvents");
                    oEvent.initMouseEvent("click", true, true, document.defaultView, 0, 0, 0, 
                                            iClientX, iClientY/*, false, false, false, false, 0, null*/); 
                    oElement.dispatchEvent(oEvent);
                }
            }
   
            var body = document.body;

            body.onclick = function(event) {
                alert("clicked at (" + event.clientX + "," + event.clientY + ")");
            };

            imitateClick(body, 100, 100);

https://developer.mozilla.org/en-US/docs/Web/API/MouseEvent/initMouseEvent

其中,

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
void initMouseEvent(String typeArg, boolean canBubbleArg, boolean cancelableArg, org.w3c.dom.views.AbstractView viewArg, int detailArg, int screenXArg, int screenYArg, int clientXArg, int clientYArg, boolean ctrlKeyArg, boolean altKeyArg, boolean shiftKeyArg, boolean metaKeyArg, short buttonArg, EventTarget relatedTargetArg)

initMouseEvent 方法用于初始化通过 DocumentEvent 接口创建的 MouseEvent 的值。此方法只能在通过dispatchEvent 方法指派 MouseEvent 之前调用,尽管在该阶段可以多次调用它(如有必要)。如果被多次调用,则最后一次调用优先。

参数:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
typeArg - 指定事件类型。
canBubbleArg - 指定该事件是否可以 bubble。
cancelableArg - 指定是否可以阻止事件的默认操作。
viewArg - 指定 Event 的 AbstractView。
detailArg - 指定 Event 的鼠标单击量。
screenXArg - 指定 Event 的屏幕 x 坐标
screenYArg - 指定 Event 的屏幕 y 坐标
clientXArg - 指定 Event 的客户机 x 坐标
clientYArg - 指定 Event 的客户机 y 坐标
ctrlKeyArg - 指定是否在 Event 期间按下 control 键。
altKeyArg - 指定是否在 Event 期间按下 alt 键。
shiftKeyArg - 指定是否在 Event 期间按下 shift 键。
metaKeyArg - 指定是否在 Event 期间按下 meta 键。
buttonArg - 指定 Event 的鼠标按键。
relatedTargetArg - 指定 Event 的相关 EventTarget。

document.createEvent用于创建事件,在DOM Level 2 的事件中就有HTMLEvents,MouseEvents,UIEvents事件类型。DOM Level 3增加很多事件类型,个人觉得其中最有用的是CustomEvent自定义事件。

有效的事件类型列表:

http://www.w3school.com.cn/xmldom/met_document_createevent.asp#eventType

image.png

为DOM元素创建自定义事件的步骤为:

一、创建事件:var ev = document.createEvent('CustomEvent');

二、初始化事件:ev.initCustomEvent('自定义事件名称', false(是否允许冒泡), false(是否允许中断),args)

三、为DOM添加事件监听:element.addEventListener('自定义事件名称',fn,false)

四、分发(触发)自定义事件:element.dispatchEvent(ev)

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
        function seth() {
            this.innerHTML = '12344'; //这里的this 指向分发事件的DOM元素
        }

        var ev = document.createEvent('CustomEvent');
        ev.initCustomEvent('myevent', false, false, '');
        [].every.call(document.querySelectorAll('div'), function (v, i) {
            v.addEventListener('myevent', seth, false);
            v.dispatchEvent(ev);
            return true;
        });
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2018.09.13 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
createEventObject 与 createEvent EDIT WATCH
jQuery中有很好用的trigger来触发事件,但总不能写什么都去引入jQuery吧
meteoric
2018/11/15
8700
盘点原生JavaScript中直接触发事件的方式
JavaScript提供了多种方式来直接触发事件,无论是在用户交互、程序逻辑处理或是数据更新时。本文将全面探讨原生JavaScript中各种事件触发方式,并通过深入的技术案例分析,帮助开发者掌握这些方法在实际开发中的应用。
李游Leo
2025/01/21
1870
盘点原生JavaScript中直接触发事件的方式
浅谈JavaScript的事件(事件模拟)
  事件经常由操作或者通过浏览器功能触发,通过JavaScript也可以触发元素的事件。通过JavaScript触发事件,也称为事件的模拟。 DOM中事件模拟   可以document的createEvent方法创建event对象。这个方法接收一个参数,即表示要创建的事件类型的字符串。在DOM2级中,所有这些字符串都使用英文复数形式,在DOM3级中都变成了单数。这几个字符串如下:UIEvents,一般化的ui事件,鼠标事件和键盘事件都继承于该事件,在DOM3级中是UIEvent;MouseEvents,一般
水击三千
2018/02/27
2.1K0
DOM的事件模拟
只有根据DOM2级事件实现这些事件的浏览器才返回true,以非标准方式支持这些事件的浏览器会返回false;
meteoric
2018/11/15
1.1K0
tampermonkey,采用js解析自定义脚本,实现网页列表数据采集分析
最近一直在做数据采集的事情,目的是使用java开发一套分析指定采集规则,模拟用户动作做数据提取。 因此定义了一套动作脚本,open,click,get,list,opentab,closetab。。。 java解析脚本,调用phantomjs做数据提取,生成数据json文件,对外提供数据接口。 采集引擎终于写的差不多了,虽然还有很多问题需要修改,但是终于不用加班了,嘿嘿嘿。-------jstarseven
大道七哥
2019/09/10
3.9K0
tampermonkey,采用js解析自定义脚本,实现网页列表数据采集分析
petite-vue源码剖析-双向绑定`v-model`的工作原理
双向绑定v-model不仅仅是对可编辑HTML元素(select, input, textarea和附带[contenteditable=true])同时附加v-bind和v-on,而且还能利用通过petite-vue附加给元素的_value、_trueValue和_falseValue属性提供存储非字符串值的能力。
PHP开发工程师
2022/03/15
8620
DOM事件第一弹
     近期温习了部分w3c上关于DOM事件的规范,发现以前有些模糊的概念更加清晰,以及受到罗胖(罗辑思维)的影响,很是想分享自己的了解的东西,希望大家给予指正或补充。 一、事件类型 参数 事件接口 初始化方法 HTMLEvents HTMLEvent iniEvent() MouseEvents MouseEvent iniMouseEvent() UIEvents UIEvent iniUIEvent() 此处为DOM2级事件,DOM3级对事件分解更加详细,后续文章继续整理。
sam dragon
2018/01/17
6630
DOM事件第一弹
【JS】395-重温基础:事件
事件流描述的是从页面中接收事件的顺序,通常有这样两种完全相反的事件流概念:事件冒泡流(IE团队提出)和事件捕获流(网景团队提出)。
pingan8787
2019/11/05
1.1K0
JS实现保存当前网页HTML到本地(Chrom Firefox)
<!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title>网页HTML存本地</title> <script src="http://libs.baidu.com/jquery/1.9.0/jquery.js"></script&gt; </head> <body> <a href="#">保存文件</a> <script> function fake_click(obj) { var ev = document.createEvent(
用户1503405
2021/09/23
7K1
如何用 JavaScript 模拟点击事件,简单实现 x, y 坐标点击?
在前端开发中,有时我们需要模拟点击页面上的某个位置,比如自动化测试或者模拟用户操作。今天,我将一步步带大家实现这个功能,让大家能够轻松理解并应用。
前端达人
2024/07/20
2.6K0
如何用 JavaScript 模拟点击事件,简单实现 x, y 坐标点击?
JavaScript 自定义事件的实现
自定义事件,就是有别于有别于带有浏览器特定行为的事件(类似 click, mouseover, submit, keydown 等事件),事件名称可以随意定义,可以通过特定的方法进行添加,触发以及删除。
逆葵
2019/04/25
8370
即将回家过年,一个“批量下载”需求,差点翻了车!
近期在参与一个紧急项目,临近过年了,工期紧,产品设计也比较粗暴,其中遇到一个小问题,
viktor
2022/08/04
3350
即将回家过年,一个“批量下载”需求,差点翻了车!
JS里,事件的几个细节问题--(冒泡、自定义事件)
今天想实现一个事件自动订阅到指定class的元素之上的功能。这句话很拗口,稍后解释!
申君健
2018/09/21
1.5K0
JS自定义事件原生
说在开始,Javascript自定义事件类似设计的观察者模式,通过状态的变更来监听行为,主要功能解耦,易于扩展。多用于组件、模块间的交互。 原型模式下的js自定义事件 var EventTarget = function() { this._listener = {}; }; EventTarget.prototype = { constructor: this, addEvent: function(type, fn) { if (typeof type =
空空云
2018/09/27
3.2K0
面试官:请实现Javascript发布-订阅模式
发布-订阅模式又叫做观察者模式,他定义了一种一对多的依赖关系,即当一个对象的状态发生改变的时候,所有依赖他的对象都会得到通知。
helloworld1024
2022/10/06
2720
js通过点击实现文件下载
一般情况下通过a标签可以实现下载效果,比如一般的文件类的,但是如果是图片则大部分的浏览器都会跳转的一个页面进行显示图片,而不是下载。下面我们来介绍一个通用的文件下载方法。
OECOM
2020/07/01
27.4K2
点击保存网页 (及页面的数据)
function fake_click(obj){ var ev = document.createEvent('MouseEvents'); ev.initMouseEvent( "click",true,false,window,0,0,0,0,0, false,false,false,false,0,null ); obj.dispatchEvent(ev); } function export_raw(name,data){ var urlObject = window.URL
小蔚
2019/09/11
9600
读Zepto源码之Event模块
Event 模块是 Zepto 必备的模块之一,由于对 Event Api 不太熟,Event 对象也比较复杂,所以乍一看 Event 模块的源码,有点懵,细看下去,其实也不太复杂。 读Zepto源码
对角另一面
2017/12/27
1.5K0
JavaScript事件
JavaScript事件 对于事件来讲,首先,我们需要了解这样几个概念:事件;事件处理程序;事件类型;事件流;事件冒泡;事件捕获;事件对象;事件模拟,事件方面的性能优化(事件委托、移除事件处理程序); 事件的概念 事件:指的是文档或者浏览器窗口中发生的一些特定交互瞬间。我们可以通过监听器(或者处理程序)来预定事件,以便事件发生的时候执行相应的代码。 事件处理程序:我们用户在页面中进行的点击这个动作,鼠标移动的动作,网页页面加载完成的动作等,都可以称之为事件名称,即:click、mousemove、loa
汤高
2018/01/11
2.1K0
JavaScript事件
【JS】512- JS 自定义事件如此简单!
在前端开发世界中,JavaScript 和 HTML 之间往往通过 事件 来实现交互。其中多数为内置事件,本文主要介绍 JS自定义事件概念和实现方式,并结合案例详细分析自定义事件的原理、功能、应用及注意事项。
pingan8787
2020/02/26
2K0
相关推荐
createEventObject 与 createEvent EDIT WATCH
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验