javascript & global event & custom event
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
A get data, then set global flag = true
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的更多相关文章
- Javascript 自定义事件 (custom event)
Javascript 中经常会用到自定义事件.如何创建一个简单的自定义事件呢?在创建自定义的事件之前,我们应该考虑一下和事件有关的东西.例如 click 事件,首先我们要能注册一个click事件(在一 ...
- JavaScript 中的window.event代表的是事件的状态,jquery事件对象属性,jquery中如何使用event.target
http://wenda.haosou.com/q/1373868839069215 http://kylines.iteye.com/blog/1660236 http://www.cnblogs. ...
- 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 ...
- JavaScript:事件对象Event和冒泡
本文最初发表于博客园,并在GitHub上持续更新前端的系列文章.欢迎在GitHub上关注我,一起入门和进阶前端. 以下是正文. 绑定事件的两种方式 我们在上一篇文章中已经讲过事件的概念.这里讲一下注册 ...
- JavaScript Concurrency model and Event Loop 并发模型和事件循环机制
原文地址:https://developer.mozilla.org/en-US/docs/Web/JavaScript/EventLoop JavaScript 有一个基于 event loop 的 ...
- day03—JavaScript中DOM的Event事件方法
转行学开发,代码100天——2018-03-19 1.Event 对象 Event 对象代表事件的状态,比如事件在其中发生的元素.键盘按键的状态.鼠标的位置.鼠标按钮的状态. 事件通常与函数结合使用, ...
- 一篇文章图文并茂地带你轻松学完 JavaScript 事件循环机制(event loop)
JavaScript 事件循环机制 (event loop) 本篇文章已经默认你有了基础的 ES6 和 javascript语法 知识. 本篇文章比较细致,如果已经对同步异步,单线程等概念比较熟悉的读 ...
- 前端笔记之JavaScript(十一)event&BOM&鼠标/盒子位置&拖拽/滚轮
一.事件对象event 1.1 preventdefault()和returnValue阻止默认事件 通知浏览器不要执行与事件关联的默认动作. preventdefault() 支持Chrome等高 ...
- event.keyCode|| event.which.的用法
HTML 用户名:<input type="text" id="UserAccount" onKeyPress="JumpByEnter(Use ...
随机推荐
- redis 代码结构与阅读顺序
https://www.cnblogs.com/aixiaomei/p/6311633.html
- 洛谷P4981
Description 给定 n 个点,组成一棵树,有多少种组合方法: Analysis 首先,结合题目简化意义和这句话 最多可能存在多少种父子关系 我们可以知道当且仅当有至少一个节点的儿子不同时称他 ...
- maven pom文件的 name 标签 和 url标签到底是什么作用
- 最简单直接地理解Java软件设计原则之开闭原则
写在前面 本文属于Java软件设计原则系列文章的其中一篇,后续会继续分享其他的原则.想以最简单的方式,最直观的demo去彻底理解设计原则.文章属于个人整理.也欢迎大家提出不同的想法. 首先是一些理论性 ...
- io流读写操作
/** * * DOC 将F盘下的test.jpg文件,读取后,再存到E盘下面. * * @param args * @throws Exception */ public static void m ...
- ElasticSearch 介绍、Docker安装以及基本检索第三篇
一.简介 1.1 什么是Elasticsearch? Elasticsearch是一个分布式的开源搜索和分析引擎, 适用于所有类型的数据,包括文本.数字.地理空间.结构化和啡结构化数据.Elastic ...
- 力扣1423. 可获得的最大点数-C语言
题目 题目链接 几张卡牌 排成一行,每张卡牌都有一个对应的点数.点数由整数数组 cardPoints 给出. 每次行动,你可以从行的开头或者末尾拿一张卡牌,最终你必须正好拿 k 张卡牌. 你的点数就是 ...
- fsck获取文件的block信息和位置信息
原文链接:lxw的大数据田地 » hdfs fsck命令查看HDFS文件对应的文件块信息(Block)和位置信息(Locations) 关键字:hdfs fsck.block.locations 在H ...
- hdu4507吉哥系列故事——恨7不成妻 (数位dp)
Problem Description 单身! 依然单身! 吉哥依然单身! DS级码农吉哥依然单身! 所以,他生平最恨情人节,不管是214还是77,他都讨厌! 吉哥观察了214和77这两个数,发现: ...
- POJ 2594 Treasure Exploration 最小可相交路径覆盖
最小路径覆盖 DAG的最小可相交路径覆盖: 算法:先用floyd求出原图的传递闭包,即如果a到b有路径,那么就加边a->b.然后就转化成了最小不相交路径覆盖问题. 这里解释一下floyd的作用如 ...