zoukankan      html  css  js  c++  java
  • 原生JS实现图片上传并预览功能

     1 <!DOCTYPE html>
     2 <html lang="en">
     3 <head>
     4     <meta charset="UTF-8">
     5     <meta name="viewport" content="width=device-width, initial-scale=1.0">
     6     <meta http-equiv="X-UA-Compatible" content="ie=edge">
     7     <title>原生实现图片预览功能</title>
     8 </head>
     9 <body>
    10     <label for="file">点击上传文件</label>
    11     <input id="file" onchange="uploadFiles()" accept="image/png,image/jpeg" type='file' multiple />
    12     <div class="preview">
    13         <p>No files currently selected for upload</p>
    14     </div>
    15     <script>
    16         const input = document.querySelector('input');
    17         input.style.opacity = 0;
    18         function uploadFiles() {
    19             const files = input.files; // 从元素的files属性获取文件列表
    20             const preview = document.querySelector('.preview');
    21             while(preview.firstChild) { // 每次都清空原有列表
    22                 preview.removeChild(preview.firstChild);
    23             }
    24             const ol = document.createElement('ol');
    25             preview.appendChild(ol);
    26             for(let file of files) {
    27                 const li = document.createElement('li');
    28                 const newLi = showFiles(file, li, preview);
    29                 preview.appendChild(newLi);
    30             }
    31         }
    32         function showFiles(file, li) {
    33             const { name, size, type  } = file;
    34             const isValidate = validateFileType(type)
    35             if (isValidate) {
    36                 const img = document.createElement('img');
    37                 img.src = window.URL.createObjectURL(file); //***生成文件路径,添加到img的src
    38                 const sizeChanged = getSize(size);
    39                 const textContent = document.createTextNode(name + ': ' + sizeChanged);
    40                 li.appendChild(textContent);
    41                 li.appendChild(img);                
    42             } else {
    43                 const textContent = document.createTextNode("InValide File Type");
    44                 li.appendChild(textContent);
    45             }
    46             return li;
    47         }
    48         function getSize(size) { // 按照用户习惯计算大小
    49             if (size<1024) {
    50                 return size + 'byte';
    51             } else if (size<1048576) {
    52                 return (size/1024).toFixed(1) + 'KB';
    53             } else {
    54                 return (size/1048576).toFixed(1) + 'MB';
    55             }
    56         }
    57         const fileTypes = ['image/png', 'image/jpeg'];
    58         function validateFileType(type) { // 验证文件类型
    59             if (!fileTypes.includes(type)) {
    60                 return false;
    61             }
    62             return true;
    63         }
    64     </script>
    65 </body>
    66 </html>
  • 相关阅读:
    免费公共dns推荐
    vm10 mac 序列号
    sublimetext 序列号
    操作系统第6次实验报告:使用信号量解决进程互斥访问
    操作系统第5次实验报告:内存管理
    操作系统第4次实验报告:文件系统
    操作系统第3次实验报告:管道
    操作系统第2次实验报告:创建进程
    OS第1次实验报告:熟悉使用Linux命令和剖析ps命令
    第四次实验报告:使用Packet Tracer理解RIP路由协议
  • 原文地址:https://www.cnblogs.com/lyraLee/p/11591924.html
Copyright © 2011-2022 走看看