前段时间作了一个项目,涉及到上传本地图片以及预览的功能,正好以前了解过 html5(点击查看更多关于web前端的有关资源) 能够上传本地图片,而后再网上看了一些demo结合本身的需求,终于搞定了。(PS : 不得不认可我这我的有多懒,没有需求的时候我向来不主动去学习)。移动端彻底支持哦!已测试。html
下面给你们看看代码吧怎么实现的前端
<input type="file" id="fileElem" multiple accept="image/*" onchange="handleFiles(this)"> <div id="fileList" style="width:200px;height:200px;"></div>
注:若是想写成很漂亮的那种上传按钮,告诉你们个人写法就是模拟上传,即在input下面决定定位一张图片(上传按钮),input的宽高和图片色值同样大小,透明度为0 ,最后别忘记涉及z-index的顺序。html5
Js实现图片上传前的预览功能,主要是使用html5 的 Files API 实现,ie可兼容部分功能,在火狐和chrome下正常运行。HTML5的 file input标签支持multiple 和 accept ,前一个属性可控制多文件选择,后一个控制上传的文件类型。预了解更多关于File API的资料,有本身查下。web
若有不明白请查看注解,或者给我留言均可以的。chrome
注解:app
这里咱们就说一下思路吧(我本身的理解):学习
<script> window.URL = window.URL || window.webkitURL; var fileElem = document.getElementById("fileElem"), fileList = document.getElementById("fileList"); function handleFiles(obj) { var files = obj.files, img = new Image(); if(window.URL){ //File API alert(files[0].name + "," + files[0].size + " bytes"); img.src = window.URL.createObjectURL(files[0]); //建立一个object URL,并非你的本地路径 img.width = 200; img.onload = function(e) { window.URL.revokeObjectURL(this.src); //图片加载后,释放object URL } fileList.appendChild(img); }else if(window.FileReader){ //opera不支持createObjectURL/revokeObjectURL方法。咱们用FileReader对象来处理 var reader = new FileReader(); reader.readAsDataURL(files[0]); reader.onload = function(e){ alert(files[0].name + "," +e.total + " bytes"); img.src = this.result; img.width = 200; fileList.appendChild(img); } }else{ //ie obj.select(); obj.blur(); var nfile = document.selection.createRange().text; document.selection.empty(); img.src = nfile; img.width = 200; img.onload=function(){ alert(nfile+","+img.fileSize + " bytes"); } fileList.appendChild(img); } } </script>
PS: :你们在用的时候有什么问题及时给我反馈,我写的确定不是作好的,其实我想学习一下能够多张上传的功能。可是现阶段只能分享到这里了。测试