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 ...
随机推荐
- Lambda架构正是这样一种用来处理不能够直接实时计算问题的通用架构
https://mp.weixin.qq.com/s/BGHOw12iCASJy1pgkYZi3w 当数据处理做不到实时,应该怎么办?
- LOJ10199轻拍牛头
题目描述 原题来自:USACO 2008 Dec. Silver 今天是 Bessie 的生日,并且现在是聚会的游戏时间.Bessie 让编号为 1~N 的 N 头奶牛围成一个圈坐(所以除了最后一头牛 ...
- linux:搭建java web环境
介绍 运行java web的环境 搭建 准备 Linux:Linux 操作系统 Apache Tomcat:Web 应用服务器 JDK:Java 开发工具包 jdk的安装 1.下载 链接 2.上传服务 ...
- UML——交互图(序列图+协作图)
交互图(interaction diagram):是协作图=通信图UML2.0以后的叫法=合作图=(Collaboration /Communication Diagram)以及序列图=顺序图=时序图 ...
- 利用selenium抓取网页的ajax请求
部门需要一个自动化脚本,完成web端界面功能的冒烟,并且需要抓取加载页面时的ajax请求,从接口层面判断请求是否成功.查阅了很多资料都没有人有过相关问题的处理经验,在处理过程中也踩了很多坑,所以如果你 ...
- 搭建 mariadb 数据库主从同步
一.主(master)数据库配置 1. my.cnf 添加配置 [mariadb] log-bin server_id=1 log-basename=master1 binlog-format=mix ...
- jRating五星评级
<!DOCTYPE html> <html> <head> <title>jrating使用示例</title> <meta char ...
- Codeforces Round #649 (Div. 2) A. XXXXX (贪心)
题意:有一个长度为\(n\)的数组,找一段最长子数组,使得其元素和为\(x\),如果存在,输出子数组的长度,否则输出\(-1\). 题解:这题我们要从元素和\(sum\)来考虑,首先,如果原数组的所有 ...
- Java进阶专题(二十五) 分布式锁原理与实现
前言 现如今很多系统都会基于分布式或微服务思想完成对系统的架构设计.那么在这一个系统中,就会存在若干个微服务,而且服务间也会产生相互通信调用.那么既然产生了服务调用,就必然会存在服务调用延迟或失败 ...
- 数据库之postgreSQL入门操作指南
一.增 二.删 三.改 四.查 五.SQL操作表 1.增加列 ALTER TABLE table_name ADD column_name datatype; 2.删除一列 ALTER TABLE t ...