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

怎么创建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 中处理手势和双击事件的好方案,最重要的是,他们非常容易实现和使用。

中国邮政快递业稳居全球第一建制村全部直接通邮让邮路覆盖全国,让快递下乡进村,让每一个家庭都能享受优质的寄递服务。党的十八大以来,我国抓重点补短板强弱项,建成了与全面小康相适应的现代邮政快递业。行业收入规模由2012年的1982030年有望面世的八种超级技术和发明一石墨烯石墨烯是石墨的副产品,而石墨本身就是碳的近亲。该产品非常坚固,但又非常薄轻有弹性(比钢更坚固,比纸更薄)它的导电性能也非常好。其应用非常多,特别是在可穿戴电子设备和太空旅行到2025年将改变全球经济的10项顶流技术1大数据据预测,到2025年,世界上的数据将增长到175兆字节。大数据对商业来说是无价之宝。我们不仅可以从每时每刻产生的数据中得出重大结论,而且我们现在还有机器学习,可以加速分析和Google向法庭申请要求其长期批评人士之一LutherLowe提供文件据外媒TheVerge报道,当地时间周一晚间,Google申请法庭命令,要求Google垄断搜索市场的长期批评人士之一LutherLowe提供文件,作为其正在进行的联邦反垄断案(U经常看到9元月租卡,说的天花乱坠,移动电信都有,有用过的吗?有用过还行我用过19的,现在也在用,也是有套路,激活以后马上暗箱操作套路了一个月39,这样一个月固定消费58了,然后继续套路时候被我发现了一顿臭骂,因为了解一些运营商内部的一些制度平凡的故事最近,教育部的双减政策得到了社会广泛的关注。K12教育领域正在承受着前所未有的巨大变革。作为头部互联网k12教育机构的一名招生顾问,我也是第一时间得到了消息。一开始总部打算根据校区在当今这个社会什么行业比较有前景?高尖端科技项目,但一般的人又参于不了,限于知识水平呲牙呲牙呲牙谢邀高科技芯片等,智能高科技产品,新能源公司,5G网络产品,基础设施建设,军工,等会有比较好的前景。欢迎指点补充玫瑰玫不用种地了?我国科学家用二氧化碳合成淀粉,效率是玉米的8。5倍淀粉是小麦玉米等作物的主要成分,也是工业上的原料。传统上,生产淀粉主要靠农业种植。农作物从空气中捕获二氧化碳,并通过光合作用生成淀粉。但是,这个过程效率非常低下,仅有2的太阳能转化国庆专题新能源汽车销量井喷喜人,但出行仍无法消除充电尴尬金九银十是农业收获季节,也是消费火热的黄金时间点。金九银十的说法不只出现手机家电行业,汽车行业同样也如此。随着绿色环保政策的不断调整,新能源车作为近几年的大热消费品,这块市场蛋糕已亚马逊CEO视频游戏可能成为最大的娱乐业务亚马逊CEO安迪贾西(AndyJassy)周二在一次科技大会上表示,从长远来看,视频游戏最终可能成为最大的娱乐类别。亚马逊长期以来一直在努力制作一款优秀的视频游戏。一周前,该公司发谷歌的安卓系统在中国免费使用,那他在这过程中有什么利益或者收入?应邀回答本行业问题。谷歌的安卓系统,目前在全球都是免费使用的,他的主要利润在于搭载一系列的谷歌应用,不过这个好处在中国是没有的。谷歌的安卓系统,其实是可以收费的,不过在国内它也收不
赵立坚中国人民很生气美议员声称担忧华为收集美国信息,赵立坚这是贼喊捉贼,对这种做法,中国人民很生气美国国会众议院能源和商务委员会多名议员9日致信美国交通部长,对美国政府批准华为采购汽车芯片的决定表示担重磅消息!中国移动包揽700M5G建设全部费用,享有资产所有权6月底,经中国广电与中国移动商定,700MHz无线网主设备和多频道天线产品的集中采购招标工作正式启动,这也意味着700M5G建设开启。但3个月过去了,建设工作似乎没有预想中那么顺利如果有苹果公司0。1的股份,套现的钱存银行,可以生活无忧吗?苹果公司到今天的市值是2。45万亿美元,0。1的股份,如果顺利套现,就是价值24。5亿美元。人民币对美元的汇率,今天是6。51,把24。5亿美元换算成人民币,就是将近160亿人民币x86业务被收购,华为的阵痛并不小文Vincent从2019年开始,在美国的重压之下,华为逐渐开始了新的蜕变之路。先是剥离了荣耀手机,近日又有媒体报道华为即将出售x86业务。有消息称苏州国资委将接盘,华为可以甩包袱为什么用OV的看不上小米,用小米的不愿意买OV?这3点原因很现实朋友们,大家好!欢迎您点开笑呵呵的小丑的文章,您的每一次浏览都是对小编最大的鼓励!事不宜迟,咱们进入本篇的正题。不知道大家有没有发现,就是用OPPO和VIVO手机的用户看不上小米手助听器声音变轻的原因有哪些?一。助听器电不够了有些助听器电池会在电量用尽的前半个小时左右开始,电压明显下降,就会出现助听器声音变小或者时有时无的现象,如果是这种情况,换上一颗新电池即可。二。助听器出声孔或者耳iPhone13发布在即苹果一高管因泄露公司机密被开除前两天,苹果正式宣布将于北京时间9月15日凌晨1点召开秋季新品发布会,大家期待已久的iPhone13系列也将正式亮相。随着发布会时间的确定,近期关于iPhone13和苹果公司的各种继阿里被约谈后,腾讯最近也被约谈近日,中宣部等多部门对腾讯网易等重点游戏平台和游戏租赁平台游戏直播平台进行约谈。腾讯手底拥有版权的英雄联盟也被延期上架,再加上现在未成年人防沉迷政策估计上架有点困难。本次约谈指出,多款陪玩涉黄app遭全网下架!媒体揭秘猎游APP的涉黄生意经记者在应用市场中搜索发现,上述多款陪玩APP已无搜索结果,或变为无法下载安装的灰色状态。有业内人士对记者称,此次大量陪玩APP突遭下架或与陪玩领域乱象整改有关。记者梳理发现,去年以华为5G再遭抵制,未来一片黑暗?任正非为何要发布只支持4G的P50制裁不断,华为5G再遭美国抵制,前景难道真的一片黑暗?手机在海外市场的份额不断下跌,华为的未来究竟会怎样发展?不少用户表示,华为新推出的P50价格有些过分,在自己大力宣传5G的时候为什么用小米的人几乎很少买线下机,而线下用户也几乎不买小米?众所周知,小米一加魅族的主要出货渠道是线上,特点是性价比较高,配置堆料足。而华为OPPOvivo这三家厂商的主要出货渠道是线下,同定位机型的价格,普遍要高一些。我发现一个很有趣的现