javascript作為一個(gè)客戶端腳本語(yǔ)言,經(jīng)常被用于制作各種有趣的交互效果。其強(qiáng)大的功能和靈活性,吸引了越來(lái)越多的web前端開(kāi)發(fā)人員。其中,javascript實(shí)現(xiàn)剪貼板圖片的功能也是很常見(jiàn)的一種應(yīng)用。
實(shí)現(xiàn)剪貼板圖片的方法有很多,這里我們將會(huì)講解兩種比較常規(guī)的實(shí)現(xiàn)方式。
方法一:通過(guò)H5 API實(shí)現(xiàn)剪貼板圖片
let inputFile = document.createElement('input'); inputFile.type = 'file'; inputFile.accept = 'image/*'; inputFile.onchange = function () { const file = this.files[0]; const reader = new FileReader(); reader.readAsDataURL(file); reader.onload = function (e) { let img = new Image(); img.src = e.target.result; img.onload = function () { const canvas = document.createElement('canvas'); const context = canvas.getContext('2d'); canvas.width = img.width; canvas.height = img.height; context.drawImage(img, 0, 0, img.width, img.height); canvas.toBlob(function (blob) { const item = new ClipboardItem({ 'image/png': blob }); navigator.clipboard.write([item]).then(function () { console.log("剪貼板圖片已生成"); }); }); } } }; document.body.appendChild(inputFile); inputFile.click();
上述代碼就是使用HTML5 API實(shí)現(xiàn)剪貼板圖片的完整代碼。整體流程比較簡(jiǎn)單:
(1)創(chuàng)建文件上傳的input元素;
(2)監(jiān)聽(tīng)文件上傳的change事件,獲取用戶上傳的文件(圖片);
(3)使用FileReader API把文件轉(zhuǎn)換成base64編碼;
(4)使用Image API創(chuàng)建圖片對(duì)象;
(5)把圖片放入到canvas上,同時(shí)生成一個(gè)blob對(duì)象;
(6)使用ClipboardItem API把blob對(duì)象存入到剪貼板中。
方法二:通過(guò)Canvas API實(shí)現(xiàn)剪貼板圖片
let img = new Image(); img.crossOrigin = 'anonymous'; img.src = 'https://xxx.xxx.xxx/xxxxx.jpg'; img.onload = function () { const canvas = document.createElement('canvas'); const context = canvas.getContext('2d'); canvas.width = img.width; canvas.height = img.height; context.drawImage(img, 0, 0, img.width, img.height); canvas.toBlob(function (blob) { const item = new ClipboardItem({ 'image/png': blob }); navigator.clipboard.write([item]).then(function () { console.log("剪貼板圖片已生成"); }); }); };
上述代碼就是使用Canvas API實(shí)現(xiàn)剪貼板圖片的完整代碼。整體流程比較簡(jiǎn)單:
(1)創(chuàng)建圖片對(duì)象;
(2)設(shè)置圖片對(duì)象的crossOrigin屬性使其可以進(jìn)行跨域加載;
(3)使用Image API加載圖片;
(4)把圖片放入到canvas上,同時(shí)生成一個(gè)blob對(duì)象;
(5)使用ClipboardItem API把blob對(duì)象存入到剪貼板中。
兩種方式的實(shí)現(xiàn)方式都比較簡(jiǎn)單,但需要注意的是,第二種方式的圖片必須是跨域的,否則無(wú)法加載。此外,要支持低版本瀏覽器,還需引入相關(guān)的polyfill庫(kù)。
綜上所述,使用javascript實(shí)現(xiàn)剪貼板圖片可以提高圖片分享和復(fù)制的便利,提高用戶體驗(yàn),也是web前端開(kāi)發(fā)人員必須掌握的技能之一。