当前位置: 首页 > news >正文

React实现监听粘贴事件并获取粘贴板中的截图

目录

  • 监听粘贴事件并获取粘贴板中的截图
    • TSX中给组件添加监听粘贴事件
    • 从粘贴板获取截图文件
  • React监听事件
    • 事件监听
    • 绑定的事件函数相关
    • 扩展

监听粘贴事件并获取粘贴板中的截图

TSX中给组件添加监听粘贴事件

?

1

2

3

4

5

6

7

8

9

10

11

const pasteImageRef = useRef<HTMLDivElement>(null);

useEffect(()=>{

?? ?//给组件添加监听粘贴事件

?? ?pasteImageRef.current?.addEventListener('paste', pasteHandler);?? ?

},[]);

<div

? tabIndex={-1} // 设置tabIndex才可以聚焦

? ref={pasteImageRef}

>

? <span>Ctrl+V 粘贴截图</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(func1==func2)

console.log(func3==func4)

如果还想要用命名函数,那么就要换种写法,解决方法是先在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)

相关文章:

React实现监听粘贴事件并获取粘贴板中的截图

目录 监听粘贴事件并获取粘贴板中的截图 TSX中给组件添加监听粘贴事件从粘贴板获取截图文件React监听事件 事件监听绑定的事件函数相关扩展 监听粘贴事件并获取粘贴板中的截图 TSX中给组件添加监听粘贴事件 ? 1 2 3 4 5 6 7 8 9 10 11 const pasteImageRef useRef<HTML…...

ISO_IEC_7816-3

介绍 ISO/IEC 7816 是一系列标准&#xff0c;规定了集成电路卡和此类卡的使用 互换。 这些卡是用于在外部世界和卡中的集成电路之间协商的信息交换的识别卡。 作为信息交换的结果&#xff0c;卡传递信息&#xff08;计算结果、存储的数据&#xff09;和/或修改其内容&#xff0…...

学习C#反射(Reflection)

反射提供描述程序集、模块和类型的对象&#xff08;Type 类型&#xff09;。 可以使用反射动态地创建类型的实例&#xff0c;将类型绑定到现有对象&#xff0c;或从现有对象中获取类型&#xff0c;然后调用其方法或访问器字段和属性。 如果代码中使用了特性(Attribute)&#xf…...

Spring Boot的核心组件和工作原理

引言 Spring Boot是一个快速构建应用程序的框架&#xff0c;通过自动化配置和约定优于配置的原则&#xff0c;可以快速地创建可独立运行的、生产级别的Spring应用程序。Spring Boot的核心组件是自动配置、起步依赖和嵌入式Web服务器。 在本文中&#xff0c;我们将深入了解Spr…...

【指针的深刻理解】

如何看待下面代码中的a变量? #include<stdio.h> int main() {int a 0;//同样的一个a&#xff0c;在不同的表达式中&#xff0c;名称是一样的&#xff0c;但是含义是完全不同的&#xff01;a 10;//使用的是a的空间&#xff1a;左值int b a; //使用的是a的内容&#x…...

lintcode-图的拓扑排序(java)

拓扑排序 拓扑排序-lintcode原题题目介绍解题思路代码演示解题方法二 (参考,不用掌握)前置知识 图的拓扑序和深度优先遍历和广度优先遍历 拓扑排序-lintcode原题 127.拓扑排序-原题链接,可以点进去测试 题目介绍 描述 给定一个有向图&#xff0c;图节点的拓扑排序定义如下: 对…...

【状态估计】基于随机方法优化PMU优化配置(Matlab代码实现)

&#x1f4a5;&#x1f4a5;&#x1f49e;&#x1f49e;欢迎来到本博客❤️❤️&#x1f4a5;&#x1f4a5; &#x1f3c6;博主优势&#xff1a;&#x1f31e;&#x1f31e;&#x1f31e;博客内容尽量做到思维缜密&#xff0c;逻辑清晰&#xff0c;为了方便读者。 ⛳️座右铭&a…...

Rinne Loves Graph

Rinne Loves Graph (nowcoder.com) 链接&#xff1a;登录—专业IT笔试面试备考平台_牛客网 来源&#xff1a;牛客网 题目描述 Island 发生了一场暴乱&#xff01;现在 Rinne 要和 Setsuna 立马到地上世界去。 众所周知&#xff1a;Island 是有一些奇怪的城镇和道路构成的…...

第15章:索引的数据结构

一、为什么使用索引 1.索引是存储引擎用于快速找到记录的一种数据结构。相当于一本书的目录。在进行数据查找时&#xff0c;首先查看查询条件是否命中某条索引&#xff0c;符合则通过索引查找相关数据。如果不符合则需要全表扫描&#xff0c;一条一条查找记录&#xff0c;直到…...

机械师曙光16电脑开机自动蓝屏怎么解决?

机械师曙光16电脑开机自动蓝屏怎么解决&#xff1f;有的用户在使用机械师曙光16电脑的时候&#xff0c;遇到了一些系统问题&#xff0c;导致自己无法正常的开机使用电脑。因为电脑总会变成蓝屏&#xff0c;无法进行任何操作。那么这个情况怎么去进行问题的解决呢&#xff1f;来…...

机器学习_Lasso回归_ElasticNet回归_PolynomialFeatures算法介绍_02---人工智能工作笔记0037

Lasso回归用的是L1正则化可以看到,这里的alpha就是这里的alpha对吧,就是 L1的权重 然后对于ElasticNet回归来说,这里的alpha可以看到是L1权重的超参数对吧,然后这里的p,表示的是 L2正则里面的(1-p)这里 这里要提一下: L1和L2为什么能防止过拟合,它们有什么区别?通过添加…...

第五篇:强化学习基础之马尔科夫决策过程

你好&#xff0c;我是zhenguo(郭震) 今天总结强化学习第五篇&#xff1a;马尔科夫决策过程 基础 马尔科夫决策过程&#xff08;MDP&#xff09;是强化学习的基础之一。下面统一称为&#xff1a;MDP MDP提供了描述序贯决策问题的数学框架。 它将决策问题建模为&#xff1a; 状态…...

Oracle面试题

1. 什么是存储过程&#xff0c;使用存储过程的好处&#xff1f; 存储过程&#xff08;Stored Procedure &#xff09;是一组为了完成特定功能的SQL 语句集&#xff0c;经编译后存储在数据库中。用户通过指定存储过程的名字并给出参数&#xff08;如果该存储过程带有参数&#…...

用Vue写教务系统学生管理

文章目录 一.首先创建新的Demo二.在APP里面绑定DemoStudent三.源码附上四.效果图&#xff08;新增记录还未实现&#xff09; 一.首先创建新的Demo 二.在APP里面绑定DemoStudent <template><img alt"Vue logo" src"./assets/logo.png"><!--…...

专门用于管理企业与自己客户之间所有信息的客户管理系统

一、开源项目简介 关于 NXCRM NXCRM 是一套基于 Laravel 的 CRM 应用程序。它包含了一个管理中心&#xff0c;可以管理用户、客户、产品、订单、商机&#xff0c;合同&#xff0c;收款&#xff0c;附件&#xff0c;联系人&#xff0c;跟进动态&#xff0c;发票&#xff0c;业…...

(转载)基于多层编码遗传算法的车间调度算法(matlab实现)

以下内容大部分来源于《MATLAB智能算法30个案例分析》&#xff0c;仅为学习交流所用。 1 理论基础 遗传算法具有较强的问题求解能力&#xff0c;能够解决非线性优化问题。遗传算法中的每个染色体表示问题中的一个潜在最优解&#xff0c;对于简单的问题来说&#xff0c;染色体…...

Redis的常用数据结构之哈希类型

首先这里说的哈希类型针对的是redis中的value的k-v结构 常见的操作命令 hset设置值 hsetnx命令&#xff0c;不存在可以设置&#xff0c;存在设置不成功 hget取值&#xff0c;这里与字符串类型不同是要精确到filed。前面的判断也是基于field来实现的 要是field没有就返回null h…...

计算机组成原理-存储系统-缓存存储器(Cache)

目录 一、Cache基本概念 1.2性能分析 二、 Cache和主存的映射发生 ​​​​​​2.1全相连映射​编辑 2.2直接映射​编辑 2.3组相连映射 三、Cachae的替换算法 3.1 随机算法(RADN) 3.2 先进先出算法(FIFO) 3.3 近期最少使用(LRU) 3.4 最近不经常使用(LFU) 四、写策略 4…...

打开c语言生成exe文件,出现闪退的解决方法

为什么打开c语言生成的exe文件&#xff0c;立马闪退。 起初个别问的时候&#xff0c;我只是简单的说明程序运行完了&#xff0c;就自动关了&#xff0c; 首先&#xff0c;生成的exe文件本质是控制台程序&#xff0c;这些都是依赖于windows的控制台窗口&#xff0c;程序执行完…...

算法基础学习笔记——⑩DFS与BFS\树与图

✨博主&#xff1a;命运之光 ✨专栏&#xff1a;算法基础学习 目录 DFS与BFS\树与图 ✨DFS ✨BFS &#x1f353;宽搜流程图如下&#xff1a; &#x1f353;宽搜流程&#xff1a; &#x1f353;广搜模板 ✨树与图 &#x1f353;树是特殊的图&#xff08;连通无环的图&am…...

从show version到设备‘体检报告’:新手也能看懂的思科路由器健康状态自查指南

从show version到设备‘体检报告’&#xff1a;新手也能看懂的思科路由器健康状态自查指南 当你第一次面对思科路由器的命令行界面&#xff0c;输入show version后看到满屏密密麻麻的信息&#xff0c;是不是感觉像拿到了一份天书般的体检报告&#xff1f;别担心&#xff0c;今天…...

开发者在多模型项目中如何利用 Taotoken 进行灵活路由与降级

&#x1f680; 告别海外账号与网络限制&#xff01;稳定直连全球优质大模型&#xff0c;限时半价接入中。 &#x1f449; 点击领取海量免费额度 开发者在多模型项目中如何利用 Taotoken 进行灵活路由与降级 在构建依赖大模型服务的应用时&#xff0c;服务的连续性与稳定性是开…...

为什么选择AdoptOpenJDK HomeBrew Tap?10个理由告诉你它曾是macOS最佳JDK解决方案

为什么选择AdoptOpenJDK HomeBrew Tap&#xff1f;10个理由告诉你它曾是macOS最佳JDK解决方案 【免费下载链接】homebrew-openjdk AdoptOpenJDK HomeBrew Tap 项目地址: https://gitcode.com/gh_mirrors/ho/homebrew-openjdk AdoptOpenJDK HomeBrew Tap曾是macOS系统下管…...

终极SSDTTime指南:快速免费的系统硬件优化神器

终极SSDTTime指南&#xff1a;快速免费的系统硬件优化神器 【免费下载链接】SSDTTime SSDT/DSDT hotpatch attempts. 项目地址: https://gitcode.com/gh_mirrors/ss/SSDTTime 在计算机硬件优化领域&#xff0c;SSDTTime是一款革命性的跨平台工具&#xff0c;专为简化SSD…...

PET模型完全指南:如何利用完形填空问题实现少样本文本分类与自然语言推理

PET模型完全指南&#xff1a;如何利用完形填空问题实现少样本文本分类与自然语言推理 【免费下载链接】pet This repository contains the code for "Exploiting Cloze Questions for Few-Shot Text Classification and Natural Language Inference" 项目地址: htt…...

taotoken模型广场如何帮助开发者根据任务需求选择合适大模型

&#x1f680; 告别海外账号与网络限制&#xff01;稳定直连全球优质大模型&#xff0c;限时半价接入中。 &#x1f449; 点击领取海量免费额度 taotoken模型广场如何帮助开发者根据任务需求选择合适大模型 面对市场上众多的大语言模型&#xff0c;开发者常常陷入选择困境&…...

中国开源大模型工程化实践:从数据治理到企业落地

1. 项目概述&#xff1a;一场被误读为“军备竞赛”的开源模型战略博弈“TAI #159”这个编号本身就像一个行业内部的暗号——它指向的不是某款具体产品&#xff0c;而是一期深度技术简报的核心议题&#xff1a;当全球AI格局进入新阶段&#xff0c;中国开源大模型生态的系统性突围…...

企业从 Excel 管理转向系统化管理的关键步骤

企业从 Excel 管理转向系统化管理的关键步骤 几乎每家中小企业都经历过 Excel 管理阶段。客户表、合同表、项目表、库存表、资产表、员工表、回款表&#xff0c;一个个表格撑起了企业早期管理。Excel 的优势很明显&#xff1a;灵活、低成本、人人会用。 但企业规模一旦扩大&…...

垂直领域搜索效果提升300%的关键路径,如何用DeepSeek精准捕获代码、论文、API三类技术语义?

更多请点击&#xff1a; https://kaifayun.com 第一章&#xff1a;DeepSeek垂直技术搜索的范式革命 传统通用搜索引擎在处理深度技术查询时&#xff0c;常面临语义漂移、上下文断裂与领域知识缺失三大瓶颈。DeepSeek垂直技术搜索通过融合代码理解、文档结构建模与多粒度技术实…...

Unity 2D基础:2D相机Orthographic的参数调节

Unity 2D基础&#xff1a;2D相机Orthographic的参数调节&#x1f4da; 本章学习目标&#xff1a;深入理解2D相机Orthographic的参数调节的核心概念与实践方法&#xff0c;掌握关键技术要点&#xff0c;了解实际应用场景与最佳实践。本文属于《Unity工程师成长之路教程》Unity 2…...