当前位置:网站首页>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
边栏推荐
- Comparison table of foreign lead American abbreviations
- Viewrootimpl and windowmanagerservice notes
- Is the securities account given by the school of Finance and business safe? Can I open an account?
- CADD course learning (7) -- Simulation of target and small molecule interaction (semi flexible docking autodock)
- AITM 2-0003 水平燃烧试验
- Duchefa cytokinin dihydrozeatin (DHZ) instructions
- Monorepo管理方法论和依赖安全
- 解读协作型机器人的日常应用功能
- 序列联配Sequence Alignment
- AITM2-0002 12s或60s垂直燃烧试验
猜你喜欢

Duchefa p1001 plant agar Chinese and English instructions

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

Duchefa s0188 Chinese and English instructions of spectinomycin hydrochloride pentahydrate

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

解析五育融合之下的steam教育模式

Which is the best online collaboration product? Microsoft loop, notion, flowus

XML建模

解析创客教育的知识迁移和分享精神

Duchefa low melting point agarose PPC Chinese and English instructions

Norgen AAV extractant box instructions (including features)
随机推荐
学习机器人无从下手?带你体会当下机器人热门研究方向有哪些
Abnova e (diii) (WNV) recombinant protein Chinese and English instructions
XML建模
Abnova DNA marker high quality control test program
Norgen AAV extractant box instructions (including features)
Binary search
How to make ERP inventory accounts of chemical enterprises more accurate
Clion-MinGW编译后的exe文件添加ico图标
示波器探头对信号源阻抗的影响
【案例】元素的显示与隐藏的运用--元素遮罩
显示器要申请BS 476-7 怎么送样?跟显示屏一样吗??
使用WebAssembly在浏览器端操作Excel
Mode - "Richter replacement principle"
poj 3414 Pots (bfs+线索)
Sequence alignment
Simple getting started example of Web Service
清除app data以及获取图标
产品好不好,谁说了算?Sonar提出分析的性能指标,帮助您轻松判断产品性能及表现
Promouvoir le développement de l'industrie culturelle et touristique par la recherche, l'apprentissage et l'enseignement pratique du tourisme
Monorepo管理方法论和依赖安全