原生JS实现图片上传并预览功能
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta http-equiv="X-UA-Compatible" content="ie=edge">
<title>原生实现图片预览功能</title>
</head>
<body>
<label for="file">点击上传文件</label>
<input id="file" onchange="uploadFiles()" accept="image/png,image/jpeg" type='file' multiple />
<div class="preview">
<p>No files currently selected for upload</p>
</div>
<script>
const input = document.querySelector('input');
input.style.opacity = 0;
function uploadFiles() {
const files = input.files; // 从元素的files属性获取文件列表
const preview = document.querySelector('.preview');
while(preview.firstChild) { // 每次都清空原有列表
preview.removeChild(preview.firstChild);
}
const ol = document.createElement('ol');
preview.appendChild(ol);
for(let file of files) {
const li = document.createElement('li');
const newLi = showFiles(file, li, preview);
preview.appendChild(newLi);
}
}
function showFiles(file, li) {
const { name, size, type } = file;
const isValidate = validateFileType(type)
if (isValidate) {
const img = document.createElement('img');
img.src = window.URL.createObjectURL(file); //***生成文件路径,添加到img的src
const sizeChanged = getSize(size);
const textContent = document.createTextNode(name + ': ' + sizeChanged);
li.appendChild(textContent);
li.appendChild(img);
} else {
const textContent = document.createTextNode("InValide File Type");
li.appendChild(textContent);
}
return li;
}
function getSize(size) { // 按照用户习惯计算大小
if (size<1024) {
return size + 'byte';
} else if (size<1048576) {
return (size/1024).toFixed(1) + 'KB';
} else {
return (size/1048576).toFixed(1) + 'MB';
}
}
const fileTypes = ['image/png', 'image/jpeg'];
function validateFileType(type) { // 验证文件类型
if (!fileTypes.includes(type)) {
return false;
}
return true;
}
</script>
</body>
</html>
原生JS实现图片上传并预览功能的更多相关文章
- 一、简单的图片上传并预览功能input[file]
一.简单的图片上传并预览功能input[file] <!DOCTYPE html> <html lang="en"> <head> <me ...
- js实现图片上传及预览---------------------->>兼容ie6-8 火狐以及谷歌
<head runat="server"> <title>图片上传及预览(兼容ie6/7/8 firefox/chrome)</title> & ...
- js实现图片上传本地预览
演示地址:https://xibushijie.github.io/static/uploadImg.html <!DOCTYPE> <html> <head> & ...
- input file实现多选,限制文件上传类型,图片上传前预览功能
限制上传类型 & 多选:① accept 属性只能与 <input type="file" /> 配合使用.它规定能够通过文件上传进行提交的文件类型. ② mu ...
- 基于jquery实现图片上传本地预览功能
一.原理 分为两步: 当上传图片的input被触发并选择本地图片之后获取要上传的图片这个对象的URL(对象URL),把对象URL赋值给事先写好的img标签的src属性即可把图片显示出来.在这里,我们需 ...
- JS兼容各个浏览器的本地图片上传即时预览效果
JS兼容各个浏览器的本地图片上传即时预览效果 很早以前 在工作曾经碰到这么一个需求,当时也是纠结了很久,也是google了很久,没有碰到合适的demo,今天特意研究了下这方面的的问题,所以也就做了个简 ...
- jQuery:[1]实现图片上传并预览
jQuery:[1]实现图片上传并预览 原理 预览思路 1.当上传对象的input被触发并选择本地图片之后获取要上传的图片对象的URL: 2.把对象URL赋值给实现写好的img标签的src属性 Fil ...
- html之file标签 --- 图片上传前预览 -- FileReader
记得以前做网站时,曾经需要实现一个图片上传到服务器前,先预览的功能.当时用html的<input type="file"/>标签一直实现不了,最后舍弃了这个标签,使用了 ...
- 图片上传本地预览。兼容IE7+
基于JQUERY扩展,图片上传预览插件 目前兼容浏览器(IE 谷歌 火狐) 不支持safari 预览地址:http://www.jinbanmen.com/test/1.html js代码:/**名称 ...
随机推荐
- MongoDB 正则表达式查询
正则表达式查询 $regex 注:^ 取反的意思 用特殊的转义字符需要在前面加一个斜杠 通过 ^取反 ,再通过$not取反,就可获得只包含一种类型的数据 \\d 数字 \\s 空格 \\ ...
- python实现文件搜索工具(简易版)
在python学习过程中有一次需要进行GUI 的绘制, 而在python中有自带的库tkinter可以用来简单的GUI编写,于是转而学习tkinter库的使用. 学以致用,现在试着编写一个简单的磁文件 ...
- nginx 设置开机启动
设置nginx开机启动chkconfig --add /etc/init.d/nginx chkconfig nginx on
- ActiveMQ的静态网络配置
static networkConnector是用于创建一个静态的配置对于网络中的多个Broker做集群,这种协议用于复合url,一个复合url包括多个url地址. <networkConnec ...
- js文件分段上传
前端代码 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/T ...
- Java数据结构Vetor
Java数据结构Vector /** * <html> * <body> * <P> Copyright JasonInternational</p> ...
- angular 源码 <一> rotuerLinkActive
这几篇,查看angular 源码. rotuerLinkActive 是路由的样式设置. 它的值是 css 的一个类.或者几个类. 主要代码如下 @Input() set routerLinkActi ...
- 关于GPU的传输速度与什么有关??
1. i5-8250U 1.6GHz 2. PCIE 3 4K 105fps = 10.45Gps 4K 一帧 = 99.5Mbit 4K YUV444 + mask = 3840*2 ...
- nexus 匿名用户的问题。
为了做到安全和不浪费我们自己的服务器资源,要绝对拒绝匿名用户进行访问: 1,不允许匿名用户访问 2,禁用匿名的账号 以下是这2点的设置图. ============================== ...
- 三角形示例(兼容IE6)
html代码: <!--三角形的绘制--> <div class="sanjiao"></div> css代码: .sanjiao{ width ...