javascript & global event & custom event

new CustomEvent object


let event = new CustomEvent(
"newMessage",
{
detail: {
message: "Hello World!",
time: new Date(),
},
bubbles: true,
cancelable: true
}
); // global html
document.querySelector(`:root`).dispatchEvent(event);
// document.querySelector(`html`).dispatchEvent(event);
// document.querySelector(`body`).dispatchEvent(event); document.addEventListener("newMessage", newMessageHandler, false);

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


"use strict"; /**
*
* @author xgqfrms
* @license MIT
* @copyright xgqfrms
*
* @description customizeEvent
* @augments
* @example
* @link
*
*/ // elements
let body = document.body;
let msgbox = document.getElementById("msgbox");
let log = document.getElementById("log"); // form submit handler
msgbox.addEventListener("submit", SendMessage, false); // newMessage event subscribers
document.addEventListener("newMessage", newMessageHandler, false);
body.addEventListener("newMessage", newMessageHandler, false);
msgbox.addEventListener("newMessage", newMessageHandler, false); // newMessage event handler
function newMessageHandler(e) {
LogEvent(
"Event subscriber on "
+
e.currentTarget.nodeName
+
", "
+
e.detail.time.toLocaleString()
+
": "
+
e.detail.message
);
} // log event in console
function LogEvent(msg) {
log.textContent += msg + "\n";
let ot = log.scrollHeight - log.clientHeight;
if (ot > 0) log.scrollTop = ot;
} // new message: raise newMessage event
function SendMessage(e) {
e.preventDefault();
let msg = document.getElementById("msg").value.trim();
if (msg && window.CustomEvent) {
let event = new CustomEvent("newMessage", {
detail: {
message: msg,
time: new Date(),
},
bubbles: true,
cancelable: true
});
e.currentTarget.dispatchEvent(event);
}
} // const customizeEvent = (datas = [], debug = false) => {
// let result = ``;
// // do something...
// return result;
// }; // export default customizeEvent; // export {
// customizeEvent,
// };

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


window.IS_NEW_MSG = false;
const autoRefreshEvent = (msg = ``) => {
let event = new CustomEvent("newMessage", {
detail: {
message: msg,
time: new Date().getTime(),
},
bubbles: true,
cancelable: true,
});
document.querySelector(`html`).dispatchEvent(event);
log(`%c dispatchEvent`, `color: red;`, event);
// document.querySelector(`:root`).dispatchEvent(event);
// e.currentTarget.dispatchEvent(event);
window.IS_NEW_MSG = true;
};

const handleSelfNewMessage = (obj = {}, debug = false) => {
log(`Self Messages =`, JSON.stringify(obj, null, 4));
let chat_list_uids = JSON.parse(window.localStorage.getItem(`chat_list_uids`));
// log(`chat_list_uids =`, chat_list_uids);
if (chat_list_uids.length) {
window.DB = window.DB || {};
window.DB_SELF = window.DB_SELF || {};
chat_list_uids.forEach(
(item, i) => {
window.DB[item] = window.DB[item] || [];
// DB Store
window.DB_SELF[item] = window.DB_SELF[item] || [];
}
);
}
if (Object.keys(obj).length) {
let {
SendUserID: senderUid,
ReciveUserID: receiverUid,
SerialNumber: serialNum,
MsgID: msgId,
Info: text,
// MsgType: msgType,
SendTime: time,
UnReadMsgCount: count,
OriginTime: timestamp,
} = obj;
let temp = {
senderUid,
receiverUid,
serialNum,
msgId,
// msgType,
text,
time,
count,
isSelf: true,
timestamp,
};
// if (window.DB_SELF[receiverUid]) {
// window.DB_SELF[receiverUid] = window.DB_SELF[receiverUid];
// } else {
// window.DB_SELF[receiverUid] = [];
// }
log(`window.DB_SELF `, window.DB_SELF, receiverUid),
window.DB_SELF[receiverUid] = window.DB_SELF[receiverUid] || [];
log(`window.DB_SELF `, window.DB_SELF, receiverUid),
window.DB_SELF[receiverUid].push(temp);
let newsList = window.DB_SELF[receiverUid];
log(`DB_SELF old`, newsList);
window.DB_SELF[receiverUid] = getUniqueObjects(newsList, `msgId`);
log(`DB_SELF new`, window.DB_SELF[receiverUid]);
// window.DB[receiverUid].push(temp);
// let newsList = window.DB[receiverUid];
// log(`news list old`, newsList);
// window.DB[receiverUid] = getUniqueObjects(newsList, `msgId`);
// log(`news list new`, window.DB[receiverUid]);
}
// delay update
// window.IS_NEW_MSG = true;
// autoSetRedPoint();
autoRefreshEvent();
};

B page

// let log = console.log;

    newMessageHandler(e) {
this.autoShowMessage();
log(`%c receiverNewMessage`, `color: green;`, e);
}, 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. 【LinuxShell】命令行常用快捷键

    Ctrl + A :光标跳到一行命令的开头.一般来说,Home 键有相同的效果: Ctrl + E :光标跳到一行命令的结尾.一般来说,End 键有相同的效果:. Ctrl + U :删除所有在光标左 ...

  2. Python学习【第2篇】:基本数据类型(详解)

    1.数字 2.字符串中的方法 str test = "xiaoxing"#首字母大写v = test.capitalize()print(v)运行后结果如下Xiaoxing tes ...

  3. EasyExcel导出小结:动态标题、标题格式、相同值合并

    1. 实列相关依赖 <dependency> <groupId>com.alibaba</groupId> <artifactId>easyexcel& ...

  4. Linux 输入输出重定向, &>file, 2>&1, 1>&2

    Linux 输入输出重定向, &>file, 2>&1, 1>&2 一.1和2在Linux中代表什么 1.1 输出重定向 1.2 输入重定向 1.3 绑定重定 ...

  5. Spark动态加载外部资源文件

    Spark动态加载外部资源文件 1.spark-submit --files 动态加载外部资源文件 之前做一个关于Spark的项目时,因项目中需要读取某个静态资源文件,然后在本地IDEA测试一切皆正常 ...

  6. php之在admin的目录下的php文件里加上JSON的报头,运行php文件会提示下载

    去掉报头就正常,但在前端引用数据时要加上JSON.parse,不然读不出数据. $.get("fetchUpLast.php",{ rd:new Date().getTime()} ...

  7. Java线程八锁

    package com.atguigu.juc1205; import java.util.concurrent.TimeUnit; class Phone//Phone.java ---> P ...

  8. HDU5732 Subway【树重心 树哈希】

    HDU5732 Subway 题意: 给出两棵大小为\(N\)的同构树,要求输出对应的节点 \(N\le 10^5\) 题解: 由于重心最多只有两个,找到重心之后以重心为根进行树哈希,找到相同哈希值的 ...

  9. HDU6321 Dynamic Graph Matching【状压DP 子集枚举】

    HDU6321 Dynamic Graph Matching 题意: 给出\(N\)个点,一开始没有边,然后有\(M\)次操作,每次操作加一条无向边或者删一条已经存在的边,问每次操作后图中恰好匹配\( ...

  10. HDOJ 1078

    标准的DAG上的DP,其实之前一直不大想得明白为什么dp[i][j]为什么一定是在(i,j)状态上的局部最优解了呢? 其实仔细想想和我一般所做的DP是一个道理,因为运用dfs的方法,因此可以确定的是, ...