JS如何实现触发事件,思路及方法是什么
Admin 2022-09-27 群英技术资讯 1071 次浏览
这篇文章主要介绍“JS如何实现触发事件,思路及方法是什么”,有一些人在JS如何实现触发事件,思路及方法是什么的问题上存在疑惑,接下来小编就给大家来介绍一下相关的内容,希望对大家解答有帮助,有这个方面学习需要的朋友就继续往下看吧。前端编写测试用例时,在测试界面上的一些效果时,通常都希望能够模拟一些用户操作,而模拟用户操作最主要的方式就是用代码触发指定事件。通常一些元素上会自带一些触发事件的方法,例如click、focus等,但是如果是其他的事件,例如mousedown、mouseup、mouseenter,这些事件怎么模拟呢?
思路
其实思路很简单,web标准中定义了一系列API接口,其中dispatchEvent允许我们向一个指定的事件目标派发一个事件,而且使用这个方法触发的事件是可以正常触发我们的标准事件处理规则的(包括事件捕获和可选的冒泡过程),那么这就非常强大了,我们可以基于此做很多事情了。
实现方法
大致流程相信大家都已经想到了,无外乎以下几步操作:
首先,创建事件实例
web标准提供了MouseEvent 接口,专指用户与指针设备( 如鼠标 )交互时发生的事件。使用此接口的常见事件包括:click、dblclick 、mouseup、mousedown。
通过构造函数MouseEvent(typeArg, mouseEventInit),可以生成一个新的MouseEvent对象。该构造函数接受两个参数,第一个参数为typeArg,用于指定事件的名称,一般都是一个字符串。第二个参数为mouseEventInit,可以初始化 MouseEvent的字典,也就是指定一些该事件的属性值,比如鼠标事件常见的screenX、screenY、clientX、clientY等属性,同时,由于MouseEvent是继承于UIEvent,UIEvent又继承于Event,所以mouseEventInit可以包含UIEventInit和EventInit中的属性。
总结一行代码就是:
const mouseEvent = new MouseEvent(typeArg, mouseEventInit);
这里大家看自己实际需要,去指定哪些属性的哪些值即可。
这里再说一句,不仅是鼠标事件,还有很多其他事件,只要浏览器支持,都可以使用的。具体参考:https://developer.mozilla.org/zh-CN/docs/Web/API
这里面列出的事件,理论上都可以自己模拟并触发。
其次,就是在指定元素上触发该事件
有了事件,那么就可以去调用对应元素上的dispatchEvent方法触发了。这里简单,也就是一行代码:
document.getElementById("id").dispatchEvent(mouseEvent);
最后,特殊事件或者场景,分解操作来模拟
有些特殊事件或者场景,其实可以分析一波细节,然后分解成若干个事件连续触发,即可巧妙的实现。
这里举个例子,点击事件,其实本质是:触发一次mousedown,同时在足够短的时间内再触发一次mouseup,那么这样即可间接实现一次click事件。即:
// 一段足够短的时间内 mousedown+mouseup=click
这样,其实在模拟一些特殊操作时,我们也可以实现了。比如,模拟用户的鼠标拖拽多选操作,其本质就是:现在某个元素上触发mousedown事件,然后执行mousemove事件,然后拖拽到某一个元素上时,触发mouseup事件;即:
// 模拟用户拖拽鼠标 (开始元素)mousedown+(截止元素)mouseup=一次鼠标拖拽操作
这里细节可以足够多,看你实际场景按需模拟即可,比如鼠标移动过程中,鼠标进入某个元素时,该元素还会触发mouseenter事件,离开元素还会触发mouseleave事件。那就是:
// 更精确的模拟用户拖拽鼠标 (开始元素)mousedown+(中间元素)mouseenter+(中间元素)mouseleave+(截止元素)mouseup=一次鼠标拖拽操作
总之,细节可以足够多,但是够你模拟出本次操作的基本测试点即可,别忘了,我们的前提是模拟用户操作,进而执行测试用例。
再进一步,你完全可以封装一些常见的用户操作,然后将方法暴露出来,在测试用例中引入,实现高度复用。
总结
总结下来呢,其实就是采用MouseEvent和dispatchEvent两个web标准提供的接口,来通过代码触发事件,进而模拟用户的操作,达到测试用例中,模拟用户行为的目的。希望对你有所帮助。
注意事项
这里有些限制条件,需要大家注意下:
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:mmqy2019@163.com进行举报,并提供相关证据,查实之后,将立刻删除涉嫌侵权内容。
猜你喜欢
本篇文章给大家带来了关于JavaScript的相关知识,其中主要介绍了关于声明提升的相关内容,声明提升是JavaScript解析器的一个特性,会对代码中的函数、变量声明语句作用提取到它所在的作用域的最前面,下面一起来看一下,希望对大家有帮助。
对于弹幕相信经常看剧的朋友应该都比较了解,很多朋友喜欢开着弹幕看剧,那么我们想要自己实现弹幕效果,要怎样做呢?下面小编就给大家分享使用原生JS怎样实现弹幕效果的实例,感兴趣的朋友可以参考。
目录router 动态路由清除vue-router退出登录清空路由router 动态路由清除重置matcher可达到路由还原效果在用户退出时调用 resetRouter(router) 即可还原路由import Vue from vueimport Router from vue-routerimport { cons
怎样用jQuery写一个用户注册的表单验证?在实际的项目中,我们常常会遇到用户注册页面的实现需求,因此下面就尝试用用jQuery写一个用户注册的表单验证,感兴趣的朋友可以参考,具体内容如下
这篇文章主要介绍了Vue3内置组件Teleport使用方法,Teleport是Vue 3.0 新增的一个内置组件,主要是为了解决一些特殊场景下模态对话框组件、组件的渲染,带着些许的了解一起走进下面文章的详细内容吧
成为群英会员,开启智能安全云计算之旅
立即注册关注或联系群英网络
7x24小时售前:400-678-4567
7x24小时售后:0668-2555666
24小时QQ客服
群英微信公众号
CNNIC域名投诉举报处理平台
服务电话:010-58813000
服务邮箱:service@cnnic.cn
投诉与建议:0668-2555555
Copyright © QY Network Company Ltd. All Rights Reserved. 2003-2020 群英 版权所有
增值电信经营许可证 : B1.B2-20140078 ICP核准(ICP备案)粤ICP备09006778号 域名注册商资质 粤 D3.1-20240008