常平镇网站建设,平台网站建设需求,wordpress收费模板,网上推广赚钱方法目录
监听粘贴事件并获取粘贴板中的截图 TSX中给组件添加监听粘贴事件从粘贴板获取截图文件React监听事件 事件监听绑定的事件函数相关扩展 监听粘贴事件并获取粘贴板中的截图 TSX中给组件添加监听粘贴事件
? 1 2 3 4 5 6 7 8 9 10 11 const pasteImageRef useRefHTML…目录
监听粘贴事件并获取粘贴板中的截图 TSX中给组件添加监听粘贴事件从粘贴板获取截图文件React监听事件 事件监听绑定的事件函数相关扩展 监听粘贴事件并获取粘贴板中的截图 TSX中给组件添加监听粘贴事件
? 1 2 3 4 5 6 7 8 9 10 11 const pasteImageRef useRefHTMLDivElement(null); useEffect((){ ?? ?//给组件添加监听粘贴事件 ?? ?pasteImageRef.current?.addEventListener(paste, pasteHandler);?? ? },[]); div ? tabIndex{-1} // 设置tabIndex才可以聚焦 ? ref{pasteImageRef} ? spanCtrlV 粘贴截图/span /div 从粘贴板获取截图文件
? 1 2 3 4 5 6 7 8 9 10 11 12 const pasteHandler (e: ClipboardEvent) { ? const { clipboardData } e; ? const { items } clipboardData; ? const { length } items; ? let blob null; ? for (let i 0; i length; i) { ? ? const item items[i]; ? ? if (item.type.startsWith(image)) { ? ? ? blob item.getAsFile(); // blob中就是截图的文件获取后可以上传到服务器 ? ? } ? } }; React监听事件 事件监听
添加事件监听
? 1 window.addEventListener(scroll, this.handleListen)
移除事件监听
? 1 window.removeEventListener(scroll, this.handleListen) 绑定的事件函数相关
绑定是事件函数必须是同一个如果不会同一个会导致解绑失败。
一般会用到的事件函数类型有三种命名函数、箭头函数、匿名函数
这里重点是添加处理的函数addEventListener()和removeEventListener()添加的处理函数必须是同一个函数什么叫同一个函数呢就是说这两个函数时相等的指向同一个地址。
1. 匿名函数
匿名函数在事件绑定中的添加与移除
? 1 2 3 4 5 6 window.addEventListener(scroll, function(e){ ? ? console.log(e) }); window.removeEventListener(scroll, function(e){ ? ? console.log(e) });
从上面的实例写法来说很明显添加和移除事件时因为使用的是匿名函数所以会返回两个不同的地址这两个事件不同所以无法移除事件
2. 命名函数
命名函数在事件绑定中的添加与移除
? 1 2 3 4 5 6 7 handleScroll(){ // 一些代码 } window.addEventListener(scroll,? ?? ?this.handleScroll.bind(this)); window.removeEventListener(scroll,? ?? ?this.handleScroll.bind(this));
以上是常用的使用命名函数的写法但其实这样写还是不对的每次加上bind之后返回的函数并不是指向同一个函数
? 1 2 3 4 5 6 7 8 9 10 11 12 const test { ? ? name:test, ? ? getName:function(){ ? ? ? ? console.log(this.name) ? ? } } let func1 test.getName.bind(test); let func2 test.getName.bind(test); let func3 test.getName; let func4 test.getName; console.log(func1func2) console.log(func3func4)
如果还想要用命名函数那么就要换种写法解决方法是先在constructor中提前声明好
? 1 2 3 4 5 6 7 8 9 constructor(){ ? ? super(); ? ? this.handleScroll this.handleScroll.bind(this) } handleScroll(){ // 一些代码 } window.addEventListener(scroll, this.handleScroll); window.removeEventListener(scroll, this.handleScroll);
3. 箭头函数
可以直接使用箭头函数来避免返回的不是同一个函数这种情况
箭头函数在事件绑定中的添加与移除
? 1 2 3 4 5 handleScroll () { // 一些代码 } window.addEventListener(scroll, this.handleScroll); window.removeEventListener(scroll, this.handleScroll); 扩展
? 1 2 target.addEventListener(type, listener, options); target.addEventListener(type, listener, useCapture);
target
可以有两种window和自定义对象
? 1 2 3 1.window.addEventListener(scroll, this.handleScroll); 2.const obj document.getElementsByClassName(classname)[0]; obj.addEventListener(scroll, this.handleScroll);
type
表示监听事件类型的字符串
一般常用的是鼠标事件(‘click’, ‘dblclick’)和键盘事件(‘keydown’, ‘keypress’)等
listener
当所监听的事件类型触发时会接收到一个事件通知实现了 Event 接口的对象对象。listener 必须是一个实现了 EventListener 接口的对象或者是一个函数。
options(可选)
一个指定有关 listener 属性的可选参数对象。可用的选项如下
capture: Boolean表示 listener 会在该类型的事件捕获阶段传播到该 EventTarget 时触发。once: Boolean表示 listener 在添加之后最多只调用一次。如果是 true listener 会在其被调用之后自动移除。passive: Boolean设置为true时表示 listener 永远不会调用preventDefault()。如果 listener 仍然调用了这个函数客户端将会忽略它并抛出一个控制台警告。
? 1 2 3 4 5 addEventListener(type, listener, { ? ? capture: false, ? ? once: false, ? ? passive: false })
useCapture(可选)
Boolean在DOM树中注册了listener的元素 是否要先于它下面的EventTarget调用该listener。
当useCapture(设为true) 时沿着DOM树向上冒泡的事件不会触发listener。当一个元素嵌套了另一个元素并且两个元素都对同一事件注册了一个处理函数时所发生的事件冒泡和事件捕获是两种不同的事件传播方式。
? 1 addEventListener(type, listener, false)