当前位置:网站首页>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
边栏推荐
- Which is the best online collaboration product? Microsoft loop, notion, flowus
- PHP反序列化+MD5碰撞
- 实现浏览页面时校验用户是否已经完成登录的功能
- When a user logs in, there is often a real-time drop-down box. For example, entering an email will @qq com,@163. com,@sohu. com
- Analyze the knowledge transfer and sharing spirit of maker Education
- haas506 2.0开发教程 - 阿里云ota - pac 固件升级(仅支持2.2以上版本)
- ts 之 类的简介、构造函数和它的this、继承、抽象类、接口
- 2.<tag-哈希表, 字符串>补充: 剑指 Offer 50. 第一个只出现一次的字符 dbc
- 研学旅游实践教育的开展助力文旅产业发展
- 启牛2980有没有用?开户安全吗、
猜你喜欢
Abbkine trakine F-actin Staining Kit (green fluorescence) scheme
产品好不好,谁说了算?Sonar提出分析的性能指标,帮助您轻松判断产品性能及表现
Abnova maxpab mouse derived polyclonal antibody solution
示波器探头对信号源阻抗的影响
How to make ERP inventory accounts of chemical enterprises more accurate
Clion-MinGW编译后的exe文件添加ico图标
PHP反序列化+MD5碰撞
使用WebAssembly在浏览器端操作Excel
Duchefa MS medium contains vitamin instructions
最长摆动序列[贪心练习]
随机推荐
LeetCode_哈希表_困难_149. 直线上最多的点数
判断横竖屏的最佳实现
POJ 3414 pots (bfs+ clues)
How to make ERP inventory accounts of chemical enterprises more accurate
Mode - "Richter replacement principle"
Is it necessary for bazel to learn
Is the securities account given by the school of Finance and business safe? Can I open an account?
AITM2-0002 12s或60s垂直燃烧试验
When a user logs in, there is often a real-time drop-down box. For example, entering an email will @qq com,@163. com,@sohu. com
Sophomore personal development summary
从架构上详解技术(SLB,Redis,Mysql,Kafka,Clickhouse)的各类热点问题
Influence of oscilloscope probe on signal source impedance
水泥胶黏剂BS 476-4 不燃性测试
Duchefa s0188 Chinese and English instructions of spectinomycin hydrochloride pentahydrate
Promouvoir le développement de l'industrie culturelle et touristique par la recherche, l'apprentissage et l'enseignement pratique du tourisme
Prosci LAG-3 recombinant protein specification
sql系列(基础)-第二章 限制和排序数据
How to renew NPDP? Here comes the operation guide!
Determine the best implementation of horizontal and vertical screens
Graph embedding learning notes