• 原生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>
  • 相关阅读:
    波涛 - 系统交易方法(2013年2月28日)
    【美】柯蒂斯·费思 - 海龟交易法则(2012年12月25日)
    【美】迈克尔·卡沃尔 - 趋势跟踪(2012年12月3日)
    DAX/PowerBI系列
    DAX基础入门
    (玩起来)DAX/PowerBI系列
    DAX/PowerBI系列
    DAX/PowerBI系列
    DAX/PowerBI系列
    MDX 用Ancestors得到Hierarchy中指定Level的值(附带SCOPE用法之一)
  • 原文地址:https://www.cnblogs.com/lyraLee/p/11591924.html
Copyright © 2020-2023  润新知