当前位置:网站首页>vant 源码解析 event.ts 事件处理 全局函数 addEventListener详解
vant 源码解析 event.ts 事件处理 全局函数 addEventListener详解
2022-07-05 20:58:00 【丰的传说】
源码
/* eslint-disable no-empty */
/* eslint-disable getter-return */
/* eslint-disable import/no-mutable-exports */
import { isServer } from '.';//判断是否是 服务端
type EventHanlder = (event?: Event) => void;
/**
* type 是联合类型
* 类型名称是 EventHanlder
* 入参是 event 类型是 Event 事件类型
* 返回值 没有返回值所以返回值的类型是 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 表示断言 断言指断定数据为某个类型
} catch (e) {}
}
/**
* try catch 捕获异常
*
* window.addEventListener 有三个参数
* 事件类型
* 事件绑定的函数
* opts 或者 true,false
* opt
* capture:boolean 如果是`true`,表示`listener`会在该类型的事件捕获阶段传播到该`EventTarget`时触发
* once:boolean 是否设置单次监听
* passive:boolean 阻止默认行为 开启或者关闭
*
*
*/
export function on(
target: HTMLElement,//目标dom元素
event: string,//事件类型
handler: EventHanlder,//事件处理函数类型
passive = false//
) {
if (!isServer) {
target.addEventListener(
event,
handler,
supportsPassive ? { capture: false, passive } : false
);
/**
* 不是服务端时
* target 是传入的dom节点
* event 事件类型
* handler是执行方法
* supportsPassive 是否支持 passive
* 是就 {capture,false,passive}
否就是false
*/
}
}
export function off(target: HTMLElement, event: string, handler: EventHanlder) {
/**
* target 给谁注册,目标元素
* event 事件类型 Event
* handler addEventListener 绑定的事件
*
*
*
*/
if (!isServer) {
target.removeEventListener(event, handler);
// off表示 注销addEventListener注册的全局事件 removeAddEventListener
}
}
export function stopPropagation(event: Event) {
// stopProgapation() 阻止事件冒泡
event.stopPropagation();
}
export function preventDefault(event: Event, isStopPropagation?: boolean) {
/* istanbul ignore else */
/**
* event 事件参数 Event
* isStopPropagation? ?表示参数是可选参数不是必填的 事件冒泡
*/
if (typeof event.cancelable !== 'boolean' || event.cancelable) {
event.preventDefault();
// 阻止默认行为
}
if (isStopPropagation) {
// 阻止事件冒泡
stopPropagation(event);
}
}
addEventListener 事件监听详解
addEventListener的作用是什么
在前端的世界中,绑定事件一般用 onClick 或者 @click 直接在dom结构上绑定事件,
但是 有一种情况就是如果html是动态的,这个时候 直接在dom结构上绑定事件就变得难以实现了,所以我就需要一个动态给html绑定事件的apI,即addEventListener
addEventListener 的参数
type 事件类型
事件处理函数
boolean 或者 Object
boolean true是 事件冒泡, false 是事件捕获
object 有三个参数
- capture 是否开启捕获阶段 传播到该元素时触发
- once 是否设置单次监听 只触发一次
- passive 是否阻止默认行为
移除事件监听 removeEventListener
target.removeEeventListener(event,handler)
有两参数 事件类型 事件函数
边栏推荐
- ts 之 属性的修饰符public、private、protect
- 教你自己训练的pytorch模型转caffe(三)
- AITM 2-0003 水平燃烧试验
- The reason why the ncnn converted model on raspberry pie 4B always crashes when called
- matplotlib绘图润色(如何形成高质量的图,例如设如何置字体等)
- Abnova丨血液总核酸纯化试剂盒预装相关说明书
- 10000+ 代码库、3000+ 研发人员大型保险集团的研发效能提升实践
- Binary search
- PVC 塑料片BS 476-6 火焰传播性能测定
- SYSTEMd resolved enable debug log
猜你喜欢
Specification of protein quantitative kit for abbkine BCA method
基于flask写一个接口
Abnova CRISPR spcas9 polyclonal antibody protocol
台风来袭!建筑工地该如何防范台风!
Abnova blood total nucleic acid purification kit pre installed relevant instructions
Analysis of steam education mode under the integration of five Education
Wanglaoji pharmaceutical's public welfare activity of "caring for the most lovely people under the scorching sun" was launched in Nanjing
Typhoon is coming! How to prevent typhoons on construction sites!
Abnova丨DNA 标记高质量控制测试方案
使用WebAssembly在浏览器端操作Excel
随机推荐
实现浏览页面时校验用户是否已经完成登录的功能
Abnova 环孢素A单克隆抗体,及其研究工具
启牛2980有没有用?开户安全吗、
基於flask寫一個接口
Is it safe to open a stock account by mobile phone? My home is relatively remote. Is there a better way to open an account?
The Chinese Academy of Management Sciences gathered industry experts, and Fu Qiang won the title of "top ten youth" of think tank experts
hdu2377Bus Pass(构建更复杂的图+spfa)
Write an interface based on flask
Duchefa d5124 md5a medium Chinese and English instructions
培养机器人教育创造力的前沿科技
Abnova maxpab mouse derived polyclonal antibody solution
Abnova total RNA Purification Kit for cultured cells Chinese and English instructions
Duchefa MS medium contains vitamin instructions
大二下个人发展小结
Is Kai Niu 2980 useful? Is it safe to open an account
教你自己训练的pytorch模型转caffe(一)
PVC 塑料片BS 476-6 火焰传播性能测定
Duchefa low melting point agarose PPC Chinese and English instructions
AITM2-0002 12s或60s垂直燃烧试验
珍爱网微服务底层框架演进从开源组件封装到自研