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>
原生JS实现图片上传并预览功能
猜你喜欢
转载自www.cnblogs.com/lyraLee/p/11591924.html
今日推荐
周排行