clipboardData属性与DataTransfer对象
前言
clipboardData
属性是ClipboardEvent
事件对象的一个属性,其本质上就是一个DataTransfer
对象;而ClipboardEvent
事件则包括copy
、cut
和paste
这三个原生事件。
通过将剪切板的数据按照DataTransfer
对象的方式保存到clipboardData
上,可以在相应的事件中来获取或者修改剪切板的数据。
常用方法
getData
DOMString DataTransfer.getData(format);
该方法可以获取到剪切板中对应格式的数据,format
参数就是指定数据的格式,其可选值有:
text/plain
:普通文本;text/uri-list
:链接文本;text
:等同于text/plain
;url
:等同于text/uri-list
;
If format equals “text”, change it to “text/plain”.
If format equals “url”, change it to “text/uri-list”. [1]
如果没有对应的数据,则会返回一个空字符串。
DataTransferItem对象
可以看出getData()
方法只能获取到文本类型的数据,但是有时候剪切板里面保存的数据可能是文件,比如复制一个图片的时候,要想从剪切板中获取图片内容就无法通过getData()
方法了;这时候可以从DataTransfer.items
属性入手,items
属性是一个DataTransferItemList
对象(一个伪数组对象),每个元素都是DataTransferItem
对象。
该对象的属性有:
type
:拖拽项(或者剪切板中保存的数据项)的类型,为MIME
值;kind
:拖拽项的性质,可以是string
或者file
;
该对象的常用方法有:
getAsFile()
:尝试将拖拽项数据包装成一个File
对象返回,不是文件就返回null
(kind
对应file
)。getAsString(callback)
:接受一个回调函数,将拖拽项数据解析为字符串后将该字符串传递给回调函数(kind
对应string
);
通过DataTransferItem
对象的getAsFile()
就可以方便地提取出剪切板中复制的图片等文件,而File
对象既可以用于上传,也能转为base64
字符串,处理图片就比较便捷了。
参考文档
- 拖拽献祭中的黑山羊-DataTransfer对象 « 张鑫旭-鑫空间-鑫生活
- ClipboardEvent.clipboardData - Web API 接口参考 | MDN
- DataTransferItem.getAsString() - Web APIs | MDN
- DataTransferItem.getAsFile() - Web API 接口参考 | MDN
- DataTransferItem - Web API 接口参考 | MDN