当前位置:网站首页>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
边栏推荐
- Influence of oscilloscope probe on measurement bandwidth
- XML modeling
- Abnova cyclosporin a monoclonal antibody and its research tools
- MYSQL IFNULL使用功能
- 启牛2980有没有用?开户安全吗、
- ODPS 下一个map / reduce 准备
- 使用WebAssembly在浏览器端操作Excel
- Binary search
- 挖财商学院给的证券账户安全吗?可以开户吗?
- Monorepo management methodology and dependency security
猜你喜欢
Abnova丨血液总核酸纯化试剂盒预装相关说明书
Return to blowing marshland -- travel notes of zhailidong, founder of duanzhitang
LeetCode_哈希表_困难_149. 直线上最多的点数
2. < tag hash table, string> supplement: Sword finger offer 50 The first character DBC that appears only once
解析五育融合之下的steam教育模式
台风来袭!建筑工地该如何防范台风!
显示器要申请BS 476-7 怎么送样?跟显示屏一样吗??
Use of thread pool
leetcode:1139. 最大的以 1 为边界的正方形
培养机器人教育创造力的前沿科技
随机推荐
Analyze the knowledge transfer and sharing spirit of maker Education
LeetCode_哈希表_困难_149. 直线上最多的点数
Écrire une interface basée sur flask
序列联配Sequence Alignment
解析创客教育的知识迁移和分享精神
Analysis of steam education mode under the integration of five Education
Determine the best implementation of horizontal and vertical screens
phpstudy小皮的mysql点击启动后迅速闪退,已解决
ClickHouse 复制粘贴多行sql语句报错
Abnova cyclosporin a monoclonal antibody and its research tools
中国的软件公司为什么做不出产品?00后抛弃互联网;B站开源的高性能API网关组件|码农周刊VIP会员专属邮件周报 Vol.097
leetcode:1139. 最大的以 1 为边界的正方形
Duchefa s0188 Chinese and English instructions of spectinomycin hydrochloride pentahydrate
Learning notes of SAS programming and data mining business case 19
实现浏览页面时校验用户是否已经完成登录的功能
LeetCode: Distinct Subsequences [115]
10000+ 代码库、3000+ 研发人员大型保险集团的研发效能提升实践
PHP反序列化+MD5碰撞
When steam education enters personalized information technology courses
Abnova fluorescent dye 620-m streptavidin scheme