当前位置:网站首页>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)
有两参数 事件类型 事件函数
边栏推荐
- When steam education enters personalized information technology courses
- 2.<tag-哈希表, 字符串>补充: 剑指 Offer 50. 第一个只出现一次的字符 dbc
- Implementation of redis unique ID generator
- Write an interface based on flask
- Is it necessary for bazel to learn
- Mathematical analysis_ Notes_ Chapter 9: curve integral and surface integral
- 五层网络协议
- Comparison table of foreign lead American abbreviations
- 解读协作型机器人的日常应用功能
- systemd-resolved 开启 debug 日志
猜你喜欢

10000+ 代码库、3000+ 研发人员大型保险集团的研发效能提升实践

When steam education enters personalized information technology courses

EN 438-7建筑覆盖物装饰用层压板材产品—CE认证

Wanglaoji pharmaceutical's public welfare activity of "caring for the most lovely people under the scorching sun" was launched in Nanjing

Who the final say whether the product is good or not? Sonar puts forward performance indicators for analysis to help you easily judge product performance and performance

实现浏览页面时校验用户是否已经完成登录的功能

Abnova丨DNA 标记高质量控制测试方案

How to make ERP inventory accounts of chemical enterprises more accurate

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

Abnova e (diii) (WNV) recombinant protein Chinese and English instructions
随机推荐
解析五育融合之下的steam教育模式
When steam education enters personalized information technology courses
【案例】元素的显示与隐藏的运用--元素遮罩
Careercup its 1.8 serial shift includes problems
poj 3414 Pots (bfs+线索)
树莓派4B上ncnn转换出来的模型调用时总是崩溃(Segment Fault)的原因
POJ 3414 pots (bfs+ clues)
渗透创客精神文化转化的创客教育
基于flask写一个接口
当用户登录,经常会有实时的下拉框,例如,输入邮箱,将会@qq.com,@163.com,@sohu.com
台风来袭!建筑工地该如何防范台风!
2. < tag hash table, string> supplement: Sword finger offer 50 The first character DBC that appears only once
字典树简单入门题(居然是蓝题?)
Mode - "Richter replacement principle"
bazel是否有学习的必要
Material design component - use bottomsheet to show extended content (II)
Determine the best implementation of horizontal and vertical screens
SYSTEMd resolved enable debug log
XML建模
Hdu2377bus pass (build more complex diagram +spfa)