纠纷奇闻社交美文家庭
投稿投诉
家庭城市
爱好生活
创业男女
能力餐饮
美文职业
心理周易
母婴奇趣
两性技能
社交传统
新闻范文
工作个人
思考社会
作文职场
家居中考
兴趣安全
解密魅力
奇闻笑话
写作笔记
阅读企业
饮食时事
纠纷案例
初中历史
说说童话
乐趣治疗

怎么创建JavaScript自定义事件

10月6日 血海塔投稿
  头条创作挑战赛
  banner
  本文同步本人掘金平台的原创翻译:https:juejin。cnpost7091657693362356255
  你肯定处理过很多的事件监听,比如点击事件或者表单提交。事件监听对许多用例来说很有帮助,但是有时我们需要创建自己的自定义事件来处理复杂的交互。在这片短文中,我将告诉你有关创建自定义事件,侦听自定义事件以及创建双击自定义事件所要了解的内容。怎么创建自定义事件
  创建自定义事件听起来很困难,但是只需要下面简单的一行代码即可。constmyEventnewEvent(myCustomEvent)复制代码
  你可以通过事件构造函数创建一个新的Event对象。在最基本的形式中,你只需要将一个字符串传递给构造函数,这个字符串就是你定义的事件名称。为了监听这个事件,你可以将该事件监听器添加到你要监听的元素上,如下:document。addEventListener(myCustomEvent,e{console。log(e)})复制代码
  最后一步,你需要做的事,触发创建并正在监听的事件。document。dispatchEvent(myEvent)复制代码
  这就需呀dispatchEvent函数了。每个元素都有这个方法,你要做的就是将你创建的对象传递给它。
  如果我们将上面讲的组合在一起,我们就得到了一个基本的事件,这个事件在我们的document元素触发,相关的事件内容会被打印出来。
  图中是这个事件对象的最基本形式。它包含大量信息,最重要的部分我这里突出显示了。
  isTrusted属性仅指该事件是由用户交互触发,还是由自定义JavaScript代码触发的。例如,当用户单击按钮时,事件将isTrusted设置为true,而我们自定义的事件会将其设置为false,因为该事件是由JavaScript触发的。
  target指调用dispatchEvent函数的元素。
  type指事件的名称。事件定制
  你可能注意到了,上面的详情中有属性bubbles,cancelable和composed属性。这些实际上,在我们创建自定义事件时可以配置的选项。constmyEventnewEvent(myCustomEvent,{bubbles:true,cancelable:true,composed:true})复制代码冒泡bubbles
  当事件触发后,bubbles属性决定这个事件是否可以通过HTML进行冒泡。这个值默认为false,这意味着不可以进行冒泡行为,如果你想事件调用父HTML元素,你可以将其设置为true。constbubbleEventnewEvent(bubbleEvent,{bubbles:true})constdefaultEventnewEvent(defaultEvent,{bubbles:false})document。addEventListener(bubbleEvent,(){Thiswillgetcalledsincetheeventwillbubbleuptothedocumentfromthebuttonconsole。log(Bubble)})document。addEventListener(defaultEvent,(){Thisnevergetscalledsincetheeventcannotbubbleuptothedocumentfromthebuttonconsole。log(Default)})constbuttondocument。querySelector(button)button。dispatchEvent(bubbleEvent)button。dispatchEvent(defaultEvent)复制代码可取消cancelable
  cancelable属性决定事件是否可以通过调用e。preventDefault()取消。默认是false不可以。如果该属性是true值,你可以调用e。preventDefault()方法。e。preventDefault()会将事件defaultPrevented属性设置为true。constcancelableEventnewEvent(cancelableEvent,{cancelable:true})constdefaultEventnewEvent(defaultEvent,{cancelable:false})document。addEventListener(cancelableEvent,e{e。preventDefault()console。log(e。defaultPrevented)True})document。addEventListener(defaultEvent,e{e。preventDefault()console。log(e。defaultPrevented)False})document。dispatchEvent(cancelableEvent)document。dispatchEvent(defaultEvent)复制代码组合composed
  composed属性决定事件是否可以通过影子DOM向上传播。默认值是false。该属性仅在你使用自定HTML元素和影子DOM的时候才适用,它所做的是允许事件在影子DOM外面传播。如果你想在影子DOM中触发的事件可以在影子DOM外被捕捉到,就将其设置为true。
  没听懂没关系,后面学着学着就懂了给事件传递自定义数据
  当你使用自定事件时,你希望自定义的数据传递给你的事件。使用newEvent构造函数是不可能的,这也就是为什么会有第二种创建事件的方法。constmyEventnewCustomEvent(myEvent,{detail:{hello:World}})复制代码
  CustomEvent构造函数取代Event构造函数。这与newEvent的工作方式相同,但你可以将detail属性以及bubbles,cancelable和composed属性一起传递给第二个参数。detail属性中你设置的内容都会传递给事件监听器。constmyEventnewCustomEvent(myEvent,{detail:{hello:World}})document。addEventListener(myEvent,e{console。log(e。detail){hello:World}})document。dispatchEvent(myEvent)复制代码命名约定
  在我们讲自定义双击事件的例子前,我想先讲讲命名约定。你可以为自定义事件命名任何你想要的名字,但是还是遵循命名约定,以更方便使用自己的代码。最普遍的命名约定事件,是为事件添加custom:前缀。
  custom:以区分自定义事件和本身的事件,而且,如果JavaScript添加与你的事件同名的新事件,它还可以确保你的代码不会中断。举个例子,如果JavaScript添加了一个名为doubleclick事件,然后你已经在时候doubleclick自定义事件了,那么你会遇到问题,因为你自定义代码将触发该事件,并且浏览器也会尝试触发它自己的副本。AlwaysusesomeformofnamingconventionconstmyEventnewEvent(custom:doubleClick)复制代码双击事件
  在这个例子中,我们将创建一个双击的事件,只要你在短时间内单击一个元素,就会触发该事件。该事件还会将按钮单击之间的总时间作为自定义数据传递。
  首先,我们需要创建一个正常的单击事件监听器来确保是否有双击。constbuttondocument。querySelector(button)constMAXDOUBLECLICKTIME500letlastClick0button。addEventListener(click,e{consttimeBetweenClickse。timeStamplastClickif(timeBetweenClicksMAXDOUBLECLICKTIME){lastClicke。timeStampreturn}TODO:Doubleclickhappened。Triggercustomevent。lastClick0})复制代码
  上面的代码使用timeStamp属性来确保按钮上单击事件之间的时间。如果点击之间的时间超过500毫秒。则会立刻返回并更新lastClick的值。一旦我们在500毫秒内点击了两次,我们将通过if检查并触发我们的双击事件。为此,我们需要创建我们的事件并调用它。
  对于我们自定义的事件,我们将所有选项都设置为true,因为默认情况下,单击事件将所有这些属性设置为true,而且我们希望双击的行为类似于正常的单击。我们也将timeBetweenClicks传递到detail选项中。最后,我们在事件的目标上调度事件,这里是按钮元素。我们剩下要做的最后一件事就是监听事件。
  我们刚刚向按钮田间了一个简单的事件监听器,它将打印出DoubleClick之间的时间。总结
  自定义事件是JavaScript中处理手势和双击事件的好方案,最重要的是,他们非常容易实现和使用。
  本文为译文,采用意译
  【完】
投诉 评论 转载

沈腾过生日,谢娜喝高了把账结了,第二天她去要债,沈腾不认账?沈腾生日那天,一群人都喝醉了,娜娜迷迷糊糊地帮忙算账。第二天在娜娜醒来要讨债,沈腾不承认。我气得娜娜整天给他打电话。最后娜娜做了什么让沈腾还她的!有一次,沈腾过生日,他喊……梅西小弟恩佐的1。2亿的水分还是很大本赛季欧冠八强皇马主场兵不血刃拿下切尔西,如果按照这个状态下去,切尔西肯定出局,但是作为阿根廷的球迷来说,切尔西是死是活我们不关心,我们就关心恩佐的表现问题。看赛后的评分……绚丽紫云英2022年3月15日起床后,天气晴好,夫人提议去灵川县青狮潭水库(公平乡)赏紫云英(红花草),10时从桂林市区出发驱车2小时到达灵川县黄村龙家即青狮潭水库的岸边上,一下车居高望……张总把小孩性格培养的太好了,值得学习这段时间看了两好夫妇张总两夫妻的视频,我真心觉得这两个男孩培养的太好了,不知道大家有没有注意到这几个细节,从身体素质来说老大在奶奶进门那一刻,开门,转身到跪下再磕头相当的快,行……女儿最喜欢吃的三道菜我的养娃下厨日记红烧肉回锅鱼家常豆腐做菜是一种享受也是一种爱的表达看到自己做的菜被家人或朋友吃光盘那种快乐和幸福的感觉只有……怎么创建JavaScript自定义事件头条创作挑战赛banner本文同步本人掘金平台的原创翻译:https:juejin。cnpost7091657693362356255你肯定处理过很多的事件监……苹果亚马逊收14亿元天价罚单!不服被判垄断双双表示将上诉日前,有报道称意大利反垄断局经过16个月的调查和检查,最终决定对亚马逊和苹果公司处以超过2亿欧元(约14。5亿人民币)的罚款。其中,对亚马逊罚款为6870万欧元(约4。9……Python递归获取指定路径下所有特定类型的文件路径在做数据整理时,有时需要批量获取指定路径下特定类型的文件绝对路径,Python似乎没有这种依赖库可以直接拿来使用,于是借助内置的os模块和递归来实现一个简单的函数,达到获取文件……年过50这五个检查一定要定期去做体检这五个检查一定要定期去做。第一,低剂量的螺旋CT筛查。来看一看我们的肺上有没有结节,有没有肺癌的早期病变,这个是非常重要的,建议1年做1次。第二,胃肠镜。这个也是需……104岁国医大师邓铁涛养生秘诀坚持8点,活过百年1hr第一点:吃好。俗话说,民以食为天。谈到养生保健,国医大师邓铁涛首先强调的一点,就是吃好。说起来吃好,一般人都会认为是生猛海鲜,鸡鸭鱼肉,是大快朵颐,是饕……CBA公布新赛季第一阶段赛程CBA联盟近日公布了新赛季第一阶段赛程。新赛季常规赛第一阶段将于10月16日打响,吉林队与南京同曦队的比赛将最先开始。从公布的赛程看,新赛季常规赛第一阶段从10月16日开……传言苹果M2ProM2Max下月将在台积电3nm工艺投入量产M2Pro和M2Max定于下月在TSMC尖端的3纳米架构上量产。苹果期望在即将推出的Mac电脑中使用这些强大而高效的SOC,但仅仅因为它们将于下个月量产,并不意味着我们会这么早……
2TB不到500元铨兴S101系列固态硬盘再降新低各位头条的大神们,有木有戒烟最有效的方法啊。求告知,谢谢了?2015!2016!选秀时被24队错过,离开哈登,他又找到了ChatGPT这样的AI,会让投资更容易吗?五脏虚弱,梦象多彩公布年报当天,车辆起火!小鹏去年营收增了,但亏损也在扩大殷殷之情俱系华夏,寸寸丹心皆为家国法网第五日赛程头号种子被挤出中心场,郑钦文再战哈勒普身高在150158cm之间的女人,该怎么穿大衣?董卿的口红到底是什么牌子的?卡夫亨氏转向噱头和怀旧,以重振其尘封的品牌有哪些适合学生党的护肤品?滴滴柳青回忆三年前患癌:人生除了生死,其他都是擦伤为何说关系好,不能称得上是人脉?热博聚热点网 4月征文珍惜给药造句用给药造句大全抽脂后注意什么事情复古碎花雪纺衬衫新品女装上市学生恐怖字体走红,老师阅卷后浑身不适,家长中高考吃大亏从两张皮走向一盘棋文案(雨)文案诗句,珍藏版让孩子从小自信的28个方法恶性葡萄胎的治疗方法是什么很难驾驭的发色吸睛出彩回头率高

友情链接:中准网聚热点快百科快传网快生活快软网快好知文好找美丽时装彩妆资讯历史明星乐活安卓数码常识驾车健康苹果问答网络发型电视车载室内电影游戏科学音乐整形