javascript & global event & custom event

new CustomEvent object


  1. let event = new CustomEvent(
  2. "newMessage",
  3. {
  4. detail: {
  5. message: "Hello World!",
  6. time: new Date(),
  7. },
  8. bubbles: true,
  9. cancelable: true
  10. }
  11. );
  12. // global html
  13. document.querySelector(`:root`).dispatchEvent(event);
  14. // document.querySelector(`html`).dispatchEvent(event);
  15. // document.querySelector(`body`).dispatchEvent(event);
  16. document.addEventListener("newMessage", newMessageHandler, false);

https://www.sitepoint.com/javascript-custom-events/


  1. "use strict";
  2. /**
  3. *
  4. * @author xgqfrms
  5. * @license MIT
  6. * @copyright xgqfrms
  7. *
  8. * @description customizeEvent
  9. * @augments
  10. * @example
  11. * @link
  12. *
  13. */
  14. // elements
  15. let body = document.body;
  16. let msgbox = document.getElementById("msgbox");
  17. let log = document.getElementById("log");
  18. // form submit handler
  19. msgbox.addEventListener("submit", SendMessage, false);
  20. // newMessage event subscribers
  21. document.addEventListener("newMessage", newMessageHandler, false);
  22. body.addEventListener("newMessage", newMessageHandler, false);
  23. msgbox.addEventListener("newMessage", newMessageHandler, false);
  24. // newMessage event handler
  25. function newMessageHandler(e) {
  26. LogEvent(
  27. "Event subscriber on "
  28. +
  29. e.currentTarget.nodeName
  30. +
  31. ", "
  32. +
  33. e.detail.time.toLocaleString()
  34. +
  35. ": "
  36. +
  37. e.detail.message
  38. );
  39. }
  40. // log event in console
  41. function LogEvent(msg) {
  42. log.textContent += msg + "\n";
  43. let ot = log.scrollHeight - log.clientHeight;
  44. if (ot > 0) log.scrollTop = ot;
  45. }
  46. // new message: raise newMessage event
  47. function SendMessage(e) {
  48. e.preventDefault();
  49. let msg = document.getElementById("msg").value.trim();
  50. if (msg && window.CustomEvent) {
  51. let event = new CustomEvent("newMessage", {
  52. detail: {
  53. message: msg,
  54. time: new Date(),
  55. },
  56. bubbles: true,
  57. cancelable: true
  58. });
  59. e.currentTarget.dispatchEvent(event);
  60. }
  61. }
  62. // const customizeEvent = (datas = [], debug = false) => {
  63. // let result = ``;
  64. // // do something...
  65. // return result;
  66. // };
  67. // export default customizeEvent;
  68. // export {
  69. // customizeEvent,
  70. // };

old way

  1. A get data, then set global flag = true

  2. B setInterval, listen the global = true, then show data and set the global flag = true


OK

A page


  1. window.IS_NEW_MSG = false;
  2. const autoRefreshEvent = (msg = ``) => {
  3. let event = new CustomEvent("newMessage", {
  4. detail: {
  5. message: msg,
  6. time: new Date().getTime(),
  7. },
  8. bubbles: true,
  9. cancelable: true,
  10. });
  11. document.querySelector(`html`).dispatchEvent(event);
  12. log(`%c dispatchEvent`, `color: red;`, event);
  13. // document.querySelector(`:root`).dispatchEvent(event);
  14. // e.currentTarget.dispatchEvent(event);
  15. window.IS_NEW_MSG = true;
  16. };

  1. const handleSelfNewMessage = (obj = {}, debug = false) => {
  2. log(`Self Messages =`, JSON.stringify(obj, null, 4));
  3. let chat_list_uids = JSON.parse(window.localStorage.getItem(`chat_list_uids`));
  4. // log(`chat_list_uids =`, chat_list_uids);
  5. if (chat_list_uids.length) {
  6. window.DB = window.DB || {};
  7. window.DB_SELF = window.DB_SELF || {};
  8. chat_list_uids.forEach(
  9. (item, i) => {
  10. window.DB[item] = window.DB[item] || [];
  11. // DB Store
  12. window.DB_SELF[item] = window.DB_SELF[item] || [];
  13. }
  14. );
  15. }
  16. if (Object.keys(obj).length) {
  17. let {
  18. SendUserID: senderUid,
  19. ReciveUserID: receiverUid,
  20. SerialNumber: serialNum,
  21. MsgID: msgId,
  22. Info: text,
  23. // MsgType: msgType,
  24. SendTime: time,
  25. UnReadMsgCount: count,
  26. OriginTime: timestamp,
  27. } = obj;
  28. let temp = {
  29. senderUid,
  30. receiverUid,
  31. serialNum,
  32. msgId,
  33. // msgType,
  34. text,
  35. time,
  36. count,
  37. isSelf: true,
  38. timestamp,
  39. };
  40. // if (window.DB_SELF[receiverUid]) {
  41. // window.DB_SELF[receiverUid] = window.DB_SELF[receiverUid];
  42. // } else {
  43. // window.DB_SELF[receiverUid] = [];
  44. // }
  45. log(`window.DB_SELF `, window.DB_SELF, receiverUid),
  46. window.DB_SELF[receiverUid] = window.DB_SELF[receiverUid] || [];
  47. log(`window.DB_SELF `, window.DB_SELF, receiverUid),
  48. window.DB_SELF[receiverUid].push(temp);
  49. let newsList = window.DB_SELF[receiverUid];
  50. log(`DB_SELF old`, newsList);
  51. window.DB_SELF[receiverUid] = getUniqueObjects(newsList, `msgId`);
  52. log(`DB_SELF new`, window.DB_SELF[receiverUid]);
  53. // window.DB[receiverUid].push(temp);
  54. // let newsList = window.DB[receiverUid];
  55. // log(`news list old`, newsList);
  56. // window.DB[receiverUid] = getUniqueObjects(newsList, `msgId`);
  57. // log(`news list new`, window.DB[receiverUid]);
  58. }
  59. // delay update
  60. // window.IS_NEW_MSG = true;
  61. // autoSetRedPoint();
  62. autoRefreshEvent();
  63. };

B page

  1. // let log = console.log;
  2. newMessageHandler(e) {
  3. this.autoShowMessage();
  4. log(`%c receiverNewMessage`, `color: green;`, e);
  5. },
  6. document.addEventListener("newMessage", this.newMessageHandler, false);

refs



xgqfrms 2012-2020

www.cnblogs.com 发布文章使用:只允许注册用户才可以访问!


javascript & global event & custom event的更多相关文章

  1. Javascript 自定义事件 (custom event)

    Javascript 中经常会用到自定义事件.如何创建一个简单的自定义事件呢?在创建自定义的事件之前,我们应该考虑一下和事件有关的东西.例如 click 事件,首先我们要能注册一个click事件(在一 ...

  2. JavaScript 中的window.event代表的是事件的状态,jquery事件对象属性,jquery中如何使用event.target

    http://wenda.haosou.com/q/1373868839069215 http://kylines.iteye.com/blog/1660236 http://www.cnblogs. ...

  3. Error : APP-FND-01926: The custom event WHEN-LOGON-CHANGED raised unhandled exception: ORA-06502: PL

    In this Document   _afrLoop=440418974213449&id=1508865.1&_afrWindowMode=0&_adf.ctrl-stat ...

  4. JavaScript:事件对象Event和冒泡

    本文最初发表于博客园,并在GitHub上持续更新前端的系列文章.欢迎在GitHub上关注我,一起入门和进阶前端. 以下是正文. 绑定事件的两种方式 我们在上一篇文章中已经讲过事件的概念.这里讲一下注册 ...

  5. JavaScript Concurrency model and Event Loop 并发模型和事件循环机制

    原文地址:https://developer.mozilla.org/en-US/docs/Web/JavaScript/EventLoop JavaScript 有一个基于 event loop 的 ...

  6. day03—JavaScript中DOM的Event事件方法

    转行学开发,代码100天——2018-03-19 1.Event 对象 Event 对象代表事件的状态,比如事件在其中发生的元素.键盘按键的状态.鼠标的位置.鼠标按钮的状态. 事件通常与函数结合使用, ...

  7. 一篇文章图文并茂地带你轻松学完 JavaScript 事件循环机制(event loop)

    JavaScript 事件循环机制 (event loop) 本篇文章已经默认你有了基础的 ES6 和 javascript语法 知识. 本篇文章比较细致,如果已经对同步异步,单线程等概念比较熟悉的读 ...

  8. 前端笔记之JavaScript(十一)event&BOM&鼠标/盒子位置&拖拽/滚轮

    一.事件对象event 1.1 preventdefault()和returnValue阻止默认事件 通知浏览器不要执行与事件关联的默认动作. preventdefault()  支持Chrome等高 ...

  9. event.keyCode|| event.which.的用法

    HTML 用户名:<input type="text" id="UserAccount" onKeyPress="JumpByEnter(Use ...

随机推荐

  1. Java 字符串简介

    从概念上讲,Java 字符串就是 Unicode 字符序列.Java 没有内置的字符串类型,而是在标准 Java 类库中提供了一个预定义类,很自然地叫做 String.每个用双引号括起来的字符串都是 ...

  2. loj10008家庭作业

    题目描述 老师在开学第一天就把所有作业都布置了,每个作业如果在规定的时间内交上来的话才有学分.每个作业的截止日期和学分可能是不同的.例如如果一个作业学分为10 ,要求在6 天内交,那么要想拿到这 10 ...

  3. MySQL索引的原理,B+树、聚集索引和二级索引

    MySQL索引的原理,B+树.聚集索引和二级索引的结构分析 一.索引类型 1.1 B树 1.2 B+树 1.3 哈希索引 1.4 聚集索引(clusterd index) 1.5 二级索引(secon ...

  4. Java 跨域 Json字符转类对象

    前言 解析json 测试类 测试结果 前言 对于从其他服务器的url获得数据,我们一般都为json数据传输,比如服务器B要从服务器A的url获得分页信息,得到json字符后如果可以方便快捷操作要转为自 ...

  5. ESRI,空间数据处理,WKT,GeoJson

    ESRI,空间数据处理,WKT,GeoJson 一.WKT 二.GeoJson 三.WKT转GeoJson 四.GeoJson 转 WKT 一.WKT WKT(well-known text)是一种文 ...

  6. Linux-apache httd.conf文件详解

    Linux-apache httd.conf文件详解 # This is the main Apache server configuration file. It contains the # co ...

  7. DEDECMS的20位MD5加密密文解密

    解密20位md5,20位md5加密算法.   dedecms的20位md5加密算噶是从32位md5中截取的20位,所以去掉前3位喝最后1位,即可获得16位md5值,即可破解15位md5.   例如:  ...

  8. 彻底记住看起来很高级的__pycache__与__name__

    参考了的博客:https://blog.csdn.net/yitiaodashu/article/details/79023987 https://blog.csdn.net/ipi715718/ar ...

  9. docker(1)下载安装for mac

    前言 Docker 提供轻量的虚拟化,你能够从Docker获得一个额外抽象层,你能够在单台机器上运行多个Docker微容器,而每个微容器里都有一个微服务或独立应用,例如你可以将Tomcat运行在一个D ...

  10. Linux 防火墙相关操作

    目录 1.查看防火墙状态 2.部署防火墙 3.常用操作 4.其他操作 1.查看防火墙状态 systemctl status firewalld 绿字部分 Active:active(running) ...