原生 js 实现截图粘贴预览图片功能

Posted 凯小默

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了原生 js 实现截图粘贴预览图片功能相关的知识,希望对你有一定的参考价值。

效果

比如我截图我的 csdn 的信息


然后粘贴到区域里,就能预览这个图片

代码实现

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>截图粘贴预览图片</title>

    <style>
        div.preview-img 
            border: 2px solid #ddd;
            margin: .5rem;
            padding: .5rem;
            min-height: 30rem;
            border-radius: 10px;
            background-color: #fff;
        
    </style>
</head>
<body>
    <h1 style="text-align: center;">kaimo 测试截图粘贴预览图片功能,请在下面容器进行粘贴</h1>
    <div class="preview-img"></div>
    <script>
        // 监听粘贴事件
        const target = document.querySelector("div.preview-img");

        target.addEventListener("paste", (event) => 
            event.preventDefault();
            let paste = event.clipboardData || window.clipboardData;
            // 找到图片文件file
            if(paste.files && paste.files.length > 0 && paste.files[0].type === "image/png") 
                let fr = new FileReader();
                // 读取 file 然后返回 data:URL 格式的字符串(base64 编码)以表示所读取文件的内容。
                fr.readAsDataURL(paste.files[0]);
                fr.onload = function(e) 
                    let img = document.createElement("img");
                    img.src = e.target.result;
                    target.innerHTML = "";
                    target.appendChild(img);
                 
            else
                alert("请截图粘贴");
            
        );
    </script>
</body>
</html>

参考资料

readAsDataURL 方法会读取指定的 Blob 或 File 对象。读取操作完成的时候,readyState 会变成已完成DONE,并触发 loadend (en-US) 事件,同时 result 属性将包含一个data:URL 格式的字符串(base64 编码)以表示所读取文件的内容。

当用户在浏览器用户界面发起“粘贴”操作时,会触发 paste 事件。

以上是关于原生 js 实现截图粘贴预览图片功能的主要内容,如果未能解决你的问题,请参考以下文章

js实现ctrl+v粘贴图片或是截图

原生JS实现异步图片上传(预览)

原生JS和CSS实现点击图片预览放大

原生JS和CSS实现点击图片预览放大

怎么用jsp实现拖拽上传图片?

iOS开发漫话WKWebView之给H5网页图片添加点击事件以实现原生图片预览