范文健康探索娱乐情感热点
投稿投诉
热点动态
科技财经
情感日志
励志美文
娱乐时尚
游戏搞笑
探索旅游
历史星座
健康养生
美丽育儿
范文作文
教案论文
国学影视

怎么创建JavaScript自定义事件

  怎么创建自定义事件
  创建自定义事件听起来很困难,但是只需要下面简单的一行代码即可。 const myEvent = new Event("myCustomEvent")
  你可以通过事件构造函数创建一个新的 Event 对象。在最基本的形式中,你只需要将一个字符串传递给构造函数,这个字符串就是你定义的事件名称。为了监听这个事件,你可以将该事件监听器添加到你要监听的元素上,如下: document.addEventListener("myCustomEvent", e => {    console.log(e)  })
  最后一步,你需要做的事,触发创建并正在监听的事件。 document.dispatchEvent(myEvent)
  这就需呀 dispatchEvent 函数了。每个元素都有这个方法,你要做的就是将你创建的对象传递给它。
  如果我们将上面讲的组合在一起,我们就得到了一个基本的事件,这个事件在我们的 document 元素触发,相关的事件内容会被打印出来。 {    isTrusted: false    bubbles: false    cancelBubble: false    cancelable: false    composed: false    currentTarget: null    defaultPrevented: false    eventPhase: 0    path: [document, window]    returnValue: true    srcElement: document    target: document    timeStamp: 54.69999998807907    type: "myCustomEvent"  }
  图中是这个事件对象的最基本形式。它包含大量信息,最重要的部分我这里突出显示了。
  isTrusted 属性仅指该事件是由用户交互触发,还是由自定义 JavaScript 代码触发的。例如,当用户单击按钮时,事件将 isTrusted 设置为 true,而我们自定义的事件会将其设置为 false,因为该事件是由 JavaScript 触发的。
  target 指调用 dispatchEvent 函数的元素。
  type 指事件的名称。 事件定制
  你可能注意到了,上面的详情中有属性 bubbles, cancelable 和 composed 属性。这些实际上,在我们创建自定义事件时可以配置的选项。 const myEvent = new Event("myCustomEvent", {    bubbles: true,    cancelable: true,    composed: true  })冒泡 bubbles
  当事件触发后,bubbles 属性决定这个事件是否可以通过 html 进行冒泡。这个值默认为 false,这意味着不可以进行冒泡行为,如果你想事件调用父 HTML 元素,你可以将其设置为 true。 const bubbleEvent = new Event("bubbleEvent", { bubbles: true })  const defaultEvent = new Event("defaultEvent", { bubbles: false })     document.addEventListener("bubbleEvent", () => {    // This will get called since the event will bubble up to the document from the button    console.log("Bubble")  })     document.addEventListener("defaultEvent", () => {    // This never gets called since the event cannot bubble up to the document from the button    console.log("Default")  })     const button = document.querySelector("button")  button.dispatchEvent(bubbleEvent)  button.dispatchEvent(defaultEvent)可取消 cancelable
  cancelable 属性决定事件是否可以通过调用 e.preventDefault() 取消。默认是 false 不可以。如果该属性是 true 值,你可以调用 e.preventDefault() 方法。e.preventDefault() 会将事件 defaultPrevented 属性设置为 true。 const cancelableEvent = new Event("cancelableEvent", { cancelable: true })  const defaultEvent = new Event("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。
  没听懂没关系,后面学着学着就懂了  给事件传递自定义数据
  当你使用自定事件时,你希望自定义的数据传递给你的事件。使用 new Event 构造函数是不可能的,这也就是为什么会有第二种创建事件的方法。 const myEvent = new CustomEvent("myEvent", { detail: { hello: "World" } })
  CustomEvent 构造函数取代 Event 构造函数。这与 new Event 的工作方式相同,但你可以将 detail 属性以及 bubbles,cancelable 和 composed属性一起传递给第二个参数。detail 属性中你设置的内容都会传递给事件监听器。 const myEvent = new CustomEvent("myEvent", { detail: { hello: "World" } })     document.addEventListener("myEvent", e => {    console.log(e.detail) // { hello: "World" }  })     document.dispatchEvent(myEvent)命名约定
  在我们讲自定义双击事件的例子前,我想先讲讲命名约定。你可以为自定义事件命名任何你想要的名字,但是还是遵循命名约定,以更方便使用自己的代码。最普遍的命名约定事件,是为事件添加 custom: 前缀。
  custom: 以区分自定义事件和本身的事件,而且,如果 JavaScript 添加与你的事件同名的新事件,它还可以确保你的代码不会中断。
  举个例子,如果 JavaScript 添加了一个名为 doubleclick 事件,然后你已经在时候 doubleclick 自定义事件了,那么你会遇到问题,因为你自定义代码将触发该事件,并且浏览器也会尝试触发它自己的副本。 // Always use some form of naming convention  const myEvent = new Event("custom:doubleClick")双击事件
  在这个例子中,我们将创建一个双击的事件,只要你在短时间内单击一个元素,就会触发该事件。该事件还会将按钮单击之间的总时间作为自定义数据传递。
  首先,我们需要创建一个正常的单击事件监听器来确保是否有双击。 const button = document.querySelector("button")     const MAX_DOUBLE_CLICK_TIME = 500  let lastClick = 0  button.addEventListener("click", e => {    const timeBetweenClicks = e.timeStamp - lastClick    if (timeBetweenClicks > MAX_DOUBLE_CLICK_TIME) {      lastClick = e.timeStamp      return    }       // TODO: Double click happened. Trigger custom event.    lastClick = 0  })
  上面的代码使用 timeStamp 属性来确保按钮上单击事件之间的时间。如果点击之间的时间超过 500 毫秒。
  则会立刻返回并更新 lastClick 的值。一旦我们在 500 毫秒内点击了两次,我们将通过 if 检查并触发我们的双击事件。为此,我们需要创建我们的事件并调用它。 const button = document.querySelector("button")     const MAX_DOUBLE_CLICK_TIME = 500  let lastClick = 0  button.addEventListener("click", e => {    const timeBetweenClicks = e.timeStamp - lastClick    if (timeBetweenClicks > MAX_DOUBLE_CLICK_TIME) {      lastClick = e.timeStamp      return    }       // TODO: Double click happened. Trigger custom event.    lastClick = 0  })
  对于我们自定义的事件,我们将所有选项都设置为 true,因为默认情况下,单击事件将所有这些属性设置为 true,而且我们希望双击的行为类似于正常的单击。
  我们也将 timeBetweenClicks 传递到 detail 选项中。
  最后,我们在事件的目标上调度事件,这里是按钮元素。我们剩下要做的最后一件事就是监听事件。 onst button = document.querySelector("button")     const MAX_DOUBLE_CLICK_TIME = 500  let lastClick = 0  button.addEventListener("click", e => {    const timeBetweenClicks = e.timeStamp - lastClick    if (timeBetweenClicks > MAX_DOUBLE_CLICK_TIME) {      lastClick = e.timeStamp      return    }       const doubleClickEvent = new CustomEvent("custom:doubleClick", {      bubbles: true,      cancelable: true,      composed: true,      detail: { timeBetweenClicks },    })    e.target.dispatchEvent(doubleClickEvent)    lastClick = 0  })
  我们刚刚向按钮田间了一个简单的事件监听器,它将打印出 Double Click 之间的时间。 总结
  自定义事件是 JavaScript 中处理手势和双击事件的好方案,最重要的是,他们非常容易实现和使用。

亚马逊(AMZN。US)推出BuywithPrime或将冲击PayPal(PYPL。US)Block(SQ。US)业务Oppenheimer分析师DominickGabriele表示,亚马逊(AMZN。US)在第三方网站推出BuywithPrime按钮,可能会直接与PayPal(PYPL。US)争如何打通人才培养的最后一公里?这家培训机构这样做近年来,我国高校毕业生就业形势严峻。虽然毕业生众多,但结构性矛盾突出,许多企业难以找到适应自身发展需求的ICT人才,人才短缺成为制约各行各业数字化转型的重要因素。解决这一问题需要从砍掉直播业务?B站还想再试试B站又一次站在了舆论风口上,这次是因为直播裁员。据媒体报道,B站直播业务部门计划裁员,名单已初步拟好,待上海地区恢复正常后,将立即进行裁员约谈,而且裁员将会波及整个直播部门。至于原邮储银行新一代个人业务核心系统全面投产上线欧阳剑环中国证券报中证网中证网讯(记者欧阳剑环)记者4月24日获悉,邮储银行新一代个人业务核心系统日前全面投产上线。该系统是大型银行中率先同时采用企业级业务建模和分布式微服务架构,2022蔡司创新产品春季发布会加入我们的在线技术交流会,体验蔡司最新推出的产品及方案。我们希望您在行业中可以抢占先机,因此邀请您一起玩转质量,并发现我们新的灵活面向未来的解决方案。高效和高质量的无缝连接新能源汽特斯拉又起诉百万粉丝车评大V!要求公开道歉,并索赔500万元近日,据汽车自媒体车评人蔡老板表示,自己收到了特斯拉公司寄来的民事诉讼案件起诉书,以及法院已受理案件后向其送达的相关文书,特斯拉公司向其索赔500万元,并要求公开道歉。资料显示,蔡许家印大呼漂亮,真漂亮!恒驰5对于恒大到底意味着什么?恒大汽车首款SUV正在有条不紊地推进中,在申报网站上已经可以看到这款车型的具体配置了,它的定位是一辆纯电动车,纯电续航里程高达602km,采用的是宁德时代的电池。仔细看这款车型,和台积电太先进成为原罪,失去华为导致过于依赖西方引发的后果外媒认为如今的台积电在先进工艺制程方面已居于绝对领先地位,在取得领先优势之下它不断提高定价,净利润率高达四成,这已涉嫌滥用垄断市场地位,此番言论的出现对于当下非常依赖西方的台积电显小鹏P5欧洲四国开售北京时间4月21日消息,小鹏旗下第二款轿车P5正式在欧洲四国公布售价。其中荷兰售4。8万欧元,约合人民币33。74万元挪威售38万挪威克朗,约合人民币27。93万元丹麦售39万丹麦不跟风!华为交付1500万美元设备本文原创,禁止抄袭,违者必究!就在老美一声令下之后,从今年2月底开始,不仅苹果高通英特尔微软甲骨文等一众美企相继宣布对俄断供,就连台积电三星爱立信诺基亚这样的非美企业也都对俄市场实LiteDB,一个用纯C实现的轻量级文档数据库简介LiteDB是一个用Dotnet实现的小型快速轻量级的NoSQL嵌入式文档数据库,主要有以下特点纯C代码,支持NETStandard2。0,用一个小于450KB的动态链接库实现
为什么2017年上市的iPhoneX还是要比iPhoneXR要贵?信我们都听过瘦死的骆驼比马大烂船都有三斤钉,已经上市两年的iPhoneX现今的价格依然要比iPhoneXR贵,也印证着这句俗语。按理说新机推出老机退位,过去的机型应该降价,然而现在乔思伯真的贵!万元轻松装机,说说我为啥用乔家一物i100Pro不论出于怎样的需求,颜值跑分,甚至是满足成就感都可以成为装机的理由。不同于早年刚需,性能容易过剩显卡溢价,花样百出的选择可以让万元机看起来亿般般。想要摆脱平庸,玩光和ITX方案成为爱普生佳能耿耿于怀,不用加墨水碳粉的打印机究竟效果如何?我儿子的性格比较马大哈,平时丢三落四的,又是全宿生,周末才会回家,所以回来的时候经常会忘记带作业,老师意见很大,也找他谈了几次话,但正所谓江山易改,本性难移,虽然谈话后情况有所改善如何用Zookeeper优雅地实现分布式锁?这下懂了1分钟系列在上一篇文章中,我们介绍了怎么使用Redis实现分布式锁。没看的小伙伴可以点击下面链接前文阅读原来这就是分布式锁!这下懂了1分钟系列今天我们就介绍如何用Zookeeper来实现分布外形酷似怪兽,电竞风十足,SanagH6电竞游戏耳机体验如今,随着消费升级,人们对于物质生活的需求不断提高。电竞生活带给我们除了更多的解压方式,还给长久不联系的朋友,有了一个共同沟通的渠道。作为一个资深手游玩家,普通的耳机已无法再满足我150小时的超长续航,南卡N2S评测体验目前TWS耳机真的非常流行,很多人的主力耳机,都已经从有线耳机替换成了TWS。的确,没有线的束缚,使用会更方便,也更为便携。但受限于体积,TWS的整体续航,一般在30小时左右,其实苹果放狠招!iPhone13系列最高价1。4W!取消这一版本只为赚钱?给大家看一个有趣的东西,看到之后你就知道苹果有多精明了!这是苹果官网在售的入门款iPad,只有32GB和128GB两个版本,众所周知,目前这个存储空间使用情况,64GB的iPhon九月来了,十三香的苹果也要来了每年的九月都是苹果一年一度的秋季发布会。如果不出意外,今年的发布会依然采取线上的模式。按照苹果以往的惯例,苹果预计会在9月中旬召开发布会。发布会上会发布iPhone13系列的四款手iPhoneXR是怎样的存在?深度使用三年后我来告诉你小编的XR已经用了三年多了,至今为止,我依然认为它是神一样的存在。XR一开始我是无感且不看好的,但看网上片面的评价边框宽到与海齐平,厚重,LCD屏以及A12芯片后来发现其实这些都不谁是Z世代的脑白金?赛道的火热,资本的加持,不禁让人疑问,保健品行业怎么又火了起来?曾经让史玉柱宗庆后和钟睒睒等巨富都完成原始资本积累的保健品,在今天依然是一门好生意吗?谁又能成为Z世代的脑白金?文段华为HarmonyOS2发布88天,已破7000万用户,平均每天增长近80万人国产自主研发的系统鸿蒙系统于2021年6月2日正式发布了,这款系统一经发布,就像脱缰的野马,出现了暴涨的趋势,截至目前短短88天,升级机型已经超过了7000万人,适配机型覆盖近10