背景
优化用户编辑体验,实现在编辑内容(markdown 或富文本)时通过复制的方式实现图片的插入
实现
- 监听剪贴板事件中的
paste
事件 - 通过事件的回调对象获取粘贴内容,若为文本则执行默认操作,若为图片类型则阻止默认操作并继续处理
1 | const cb = (event) => { |
说明
event
是ClipboardEvent
类型,可以通过clipboardData
属性拿到数据内容clipboardData
是 [ DataTransfer](https://developer.mozilla.org/zh-CN/docs/Web/API/DataTransfer)对象,在粘贴事件中可以通过
items属性获取粘贴的内容和数据类型,其是一个 [
DataTransferItemList](https://developer.mozilla.org/zh-CN/docs/Web/API/DataTransferItemList) 对象,通过
for循环的方式遍历每一个元素,每个元素都是 [
DataTransferItem`](https://developer.mozilla.org/zh-CN/docs/Web/API/DataTransferItem)对象
DataTransferItem
对象
属性
kind
: 拖拽项的种类,string
或是file
type
:拖拽项的类型,一般是一个 MIME 类型
方法
getAsFile()
:返回一个关联拖拽项的 File 对象 (当拖拽项不是一个文件时返回 null)getAsString()
:使用拖拽项的字符串作为参数执行指定回调函数。webkitGetAsEntry()
:返回一个基于 FileSystemEntry 的对象来表示文件系统中选中的项目。通常是返回一个 FileSystemFileEntry 或是 FileSystemDirectoryEntry 对象.
注意
- 在
mac
上复制一张图片文件时会产生两个记录,第一个记录是文件名,第二个对象是文件本身 - 在
mac
上复制一个非图片类型的文件时,也会产生两个记录,一个是文件名,另一个是文件的缩略图,但是这个文章的缩略图通过getAsFile
方法无法获取到内容