当前位置:网站首页>Vant source code parsing event Detailed explanation of TS event processing global function addeventlistener
Vant source code parsing event Detailed explanation of TS event processing global function addeventlistener
2022-07-05 20:58:00 【The legend of Feng】
Source code
/* eslint-disable no-empty */
/* eslint-disable getter-return */
/* eslint-disable import/no-mutable-exports */
import { isServer } from '.';// Judge whether it is Server side
type EventHanlder = (event?: Event) => void;
/**
* type It's a joint type
* The type name is EventHanlder
* Participation is event The type is Event Event type
* Return value There is no return value, so the type of return value is void
* */
export let supportsPassive = false;
if (!isServer) {
try {
const opts = {};
Object.defineProperty(opts, 'passive', {
get() {
/* istanbul ignore next */
supportsPassive = true;
}
});
window.addEventListener('test-passive', null as any, opts);
// as To assert Assertion refers to the determination that the data is of a certain type
} catch (e) {}
}
/**
* try catch Capture exception
*
* window.addEventListener There are three parameters
* Event type
* Event bound functions
* opts perhaps true,false
* opt
* capture:boolean If it is `true`, Express `listener` It will be propagated to the `EventTarget` Trigger when
* once:boolean Do you want to set single monitor
* passive:boolean Blocking default behavior On or off
*
*
*/
export function on(
target: HTMLElement,// The goal is dom Elements
event: string,// Event type
handler: EventHanlder,// Event handler type
passive = false//
) {
if (!isServer) {
target.addEventListener(
event,
handler,
supportsPassive ? { capture: false, passive } : false
);
/**
* Not on the server
* target It's incoming dom node
* event Event type
* handler Is the execution method
* supportsPassive Do you support passive
* Yes, it is {capture,false,passive}
No is false
*/
}
}
export function off(target: HTMLElement, event: string, handler: EventHanlder) {
/**
* target To whom , Target element
* event Event type Event
* handler addEventListener Bound events
*
*
*
*/
if (!isServer) {
target.removeEventListener(event, handler);
// off Express Cancellation addEventListener Registered global events removeAddEventListener
}
}
export function stopPropagation(event: Event) {
// stopProgapation() Stop the event from bubbling
event.stopPropagation();
}
export function preventDefault(event: Event, isStopPropagation?: boolean) {
/* istanbul ignore else */
/**
* event Event parameters Event
* isStopPropagation? ? Indicates that the parameter is optional and not mandatory Event Bubbling
*/
if (typeof event.cancelable !== 'boolean' || event.cancelable) {
event.preventDefault();
// Blocking default behavior
}
if (isStopPropagation) {
// Stop the event from bubbling
stopPropagation(event);
}
}
addEventListener Details of event monitoring
addEventListener What is the role of
In the front-end world , Binding events generally use onClick perhaps @click Directly in dom Structurally bound Events ,
however One situation is if html Is dynamic , This is the time Directly in dom Structurally binding events becomes difficult to implement , So I need a dynamic to html Bound to events apI, namely addEventListener
addEventListener Parameters of
type Event type
Event handler
boolean perhaps Object
boolean true yes Event Bubbling , false It's event capture
object There are three parameters
- capture Whether to start the capture phase Triggered when propagated to this element
- once Do you want to set single monitor Trigger only once
- passive Whether to block the default behavior
Remove event monitoring removeEventListener
target.removeEeventListener(event,handler)
There are two parameters Event type Event function
边栏推荐
- 从架构上详解技术(SLB,Redis,Mysql,Kafka,Clickhouse)的各类热点问题
- LeetCode: Distinct Subsequences [115]
- ViewRootImpl和WindowManagerService笔记
- 解析创客教育的知识迁移和分享精神
- 解析五育融合之下的steam教育模式
- LeetCode_哈希表_困难_149. 直线上最多的点数
- matplotlib绘图润色(如何形成高质量的图,例如设如何置字体等)
- 中国管理科学研究院凝聚行业专家,傅强荣获智库专家“十佳青年”称号
- 木板ISO 5660-1 热量释放速率摸底测试
- Material Design组件 - 使用BottomSheet展现扩展内容(二)
猜你喜欢

Typhoon is coming! How to prevent typhoons on construction sites!

显示屏DIN 4102-1 Class B1防火测试要求

PVC 塑料片BS 476-6 火焰传播性能测定

The development of research tourism practical education helps the development of cultural tourism industry

渗透创客精神文化转化的创客教育

Enclosed please find. Net Maui's latest learning resources

leetcode:1139. 最大的以 1 为边界的正方形

如何让化工企业的ERP库存账目更准确

MySQL InnoDB架构原理

使用WebAssembly在浏览器端操作Excel
随机推荐
systemd-resolved 开启 debug 日志
Abnova DNA marker high quality control test program
教你自己训练的pytorch模型转caffe(一)
基于flask写一个接口
PVC 塑料片BS 476-6 火焰传播性能测定
PHP deserialization +md5 collision
MySQL InnoDB架构原理
解读协作型机器人的日常应用功能
How to renew NPDP? Here comes the operation guide!
研学旅游实践教育的开展助力文旅产业发展
Enclosed please find. Net Maui's latest learning resources
When steam education enters personalized information technology courses
Abnova丨培养细胞总 RNA 纯化试剂盒中英文说明书
Careercup its 1.8 serial shift includes problems
Norgen AAV extractant box instructions (including features)
基於flask寫一個接口
如何让化工企业的ERP库存账目更准确
XML建模
MYSQL IFNULL使用功能
木板ISO 5660-1 热量释放速率摸底测试