1、代码如下:

/*
autor:shzihouyu
date:2015-12-11
ver:1.0
*/
var szyFile = {
fileDom:null,//html 文件上传控件
preview:null,//图片预览的区域
imgMaxSize:0,//图片大小
filterDom:[],//符合条件的元素
filterImgDataUrl:[],//图片的dataUrl数据
dragArea:null,//拖放区域
imgRegExp:function(f){
if(!/\.(jpg|jpeg|tmp|png|gif)$/i.test(f.name)){
alert('您上传的不是图片,请重新选择后上传!');
return false;
}
return true;
},
isSupport:function(){//浏览器支持情况
if(window.File && window.FileReader && window.FileList && window.Blob) {
    return true;
} else {
   return false;
}
},
select:function(e){//图片上传触发
var e = e || window.event;
var files = e.target.files || e.dataTransfer.files;
for(var i = 0, f; f = files[i]; i++){
if(f){
if(szyFile.imgRegExp(f)){
if(f.size > szyFile.imgMaxSize*1024){
alert('图片过大,您上传的图片大于'+szyFile.imgMaxSize+'KB');
return false;
}else{
szyFile.filterDom.push(f);
var reader = new FileReader();
reader.onload = (function(){
return function(e){
szyFile.preview.innerHTML = '<img src="'+ this.result +'"/>';
szyFile.filterImgDataUrl.push(encodeURIComponent(this.result));
};
})(f);
reader.readAsDataURL(f);
}
}
}
}
},
dropHandler:function(e){//拖放处理
e.stopPropagation();
e.preventDefault();
szyFile.select(e);
},
dragOverHandler:function(e){//拖放效果处理
e.stopPropagation();
e.preventDefault();
e.dataTransfer.dragEffect = 'copy';
},
addDragArea:function(dom){//添加拖放区域
this.dragArea = dom;
},
getDataUrl:function(){//返回所有上传图片的列表
return this.filterImgDataUrl;
},
getLastDataUrl:function(){//返回最后一个上传的图片
return this.filterImgDataUrl[this.filterImgDataUrl.length-1];
},
getFileList:function(){//返回文件列表
return this.filterDom;
},
getFileLast:function(){//返回最后一个文件
return this.filterDom[this.filterDom.length-1];
},
fileOnchange:function(elm){//事件添加
elm.addEventListener('change', this.select, false);
},
fileValue:function(){//返回文件的value值
return this.fileDom.value;
},
init:function(dom,prev,maxL,dragFlg,dragDom){//file控件 预览区域 图片最大尺寸 是否支持拖拽 拖拽区域
if(dom) this.fileDom = dom;
if(prev) this.preview = prev;
if(maxL) this.imgMaxSize = maxL;
if(this.isSupport()){
this.fileOnchange(dom);
if(dragFlg){
if(dragDom){
this.dragArea = dragDom;
this.dragArea.addEventListener('drop', this.dropHandler, false);
this.dragArea.addEventListener('dragover', this.dragOverHandler, false);
}
}
}else{
alert('请先升级您的浏览器!');
}
}
}

2、用法如下

<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>分段读取文件</title>
</head>
<body>
<input type="file" id="file"/>
<div class="prevw"> </div>
<div id="drag_area" style="width:300px;height:160px;text-align:center;font-size:20px;color:#333;padding-top:140px;border:4px solid #000;">
<span>把文件拖放到此处上传</span>
</div>
</body>
</html> <script src="szyH5File.js"></script>
<script type="text/javascript">
var dom = document.querySelector('#file');
var prev = document.querySelector('.prevw');
var drag = document.querySelector('#drag_area');
szyFile.init(dom,prev,500,true,drag);
</script>

html5 图片上传版本1.0的更多相关文章

  1. HTML5 图片上传预览

    <!DOCTYPE html> <html lang="zh-cn"> <head> <meta charset="utf-8& ...

  2. html5 图片上传,支持图片预览、压缩、及进度显示,兼容IE6+及标准浏览器

    以前写过上传组件,见 打造 html5 文件上传组件,实现进度显示及拖拽上传,兼容IE6+及其它标准浏览器,对付一般的上传没有问题,不过如果是上传图片,且需要预览的话,就力有不逮了,趁着闲暇时间,给上 ...

  3. Jquery插件-Html5图片上传并裁剪

    /** * 图片裁剪 * @author yanglizhe * 2015/11/16 */ (function($){ /** * Drag */ var Drag={obj:null,init:f ...

  4. HTML5图片上传预览

    HTML5实现图片的上传预览,需要使用FileReader对象. FileReader: The FileReader object lets web applications asynchronou ...

  5. HTML5图片上传本地预览

    在开发 H5 应用的时候碰到一个问题,应用只需要一张小的缩略图,而用户用手机上传的确是一张大图,手机摄像机拍的图片好几 M,这可要浪费很多流量. 我们可以通过以下方式来解决. 获取图片 通过 File ...

  6. [javascript]——移动端 HTML5 图片上传预览和压缩

    在开发移动端web网页中,我们不可避免的会遇到文件上传的功能,但由于手机图片尺寸太大,上传时间过长导致用户体验太差,就需要在上传前对图片进行一定的压缩. 在代码之前,有必要先了解我们即将使用到的几个A ...

  7. 基于jQuery仿uploadify的HTML5图片上传控件jquery.html5uploader

    (function($){ var methods = { init:function(options){ return this.each(function(){ var $this = $(thi ...

  8. html5 图片上传 预览

    <html><body><fieldset> <legend>测试</legend> <div class="form-gr ...

  9. html5图片上传时IOS和Android均显示摄像头拍照和图片选择

    最近在做信开发时,发现<input type="file" />在IOS中可以拍照或从照片图库选择,而Android系统则显示资源管理器,无拍照选项,网上查找资料,改为 ...

随机推荐

  1. C#依据word模版动态生成文档

    新生开学,各院系辅导员代领校园卡.需要打印一份领取卡的协议,协议模版固定,但各院系卡的数量不同.需要从excel表格中抽取数据往word文件中填,同事咨询是否可以用word中的邮件合并功能,心想有这功 ...

  2. 使用Eclipse设定Android开发环境

    使用Eclipse设定Android开发环境 花了大概几天的时间最终搭建好了开发Android的环境了! 我是使用Eclipse +ADT顺利地搭建Android开发环境的. 如今Google以及An ...

  3. uva10067 Playing with Wheels 【建图+最短路】

    题目:option=com_onlinejudge&Itemid=8&page=show_problem&problem=1008">uva10067 Play ...

  4. SharePoint 2013 添加Ribbon菜单

    原文:SharePoint 2013 添加Ribbon菜单 前言:今天,我们尝试一下添加SharePoint2013的Ribbon菜单,这个Ribbon菜单是由XML定义,JavaScript脚本来实 ...

  5. avalon组件

    如何做一个avalon组件 在avalon1.5中改用更直观的自定义标签来声明组件,废掉ms-widget,引入更强大的生命周期管理,可以让组件任意套嵌. 组件是由JS,HTML,CSS构成 JS 以 ...

  6. cocos2d-x3.2中map的基本操作和使用

    在游戏开发中,我们有时候会用到map,而map的使用方法我简单给大家介绍一下.Map是c++的一个标准容器,她提供了非常好一对一的关系,在一些程序中建立一个map能够起到事半功倍的效果,总结了一些ma ...

  7. Notepad++ 经常使用快捷键 (MEMO)

    最近的一项研究Lua,使用Notepad++ 作为编译器. 今天早上无意中按下 Ctrl+D ,.突然认为Notepad++ 这东西非常奇妙. 网上查找了Notepad++的快捷键,尝试 Ctrl+Q ...

  8. User、Role、Permission数据库设计ABP

    ABP 初探 之User.Role.Permission数据库设计 (EntityFramework 继承的另一种使用方法) 最近群里(134710707)的朋友都在讨论ABP源码,我把最近学习的内容 ...

  9. Android两个注意事项.深入了解Intent和IntentFilter(两)

    深入理解Intent和IntentFiler(二) 转载请表明出处:http://blog.csdn.net/u012637501(嵌入式_小J的天空)     在上一篇文章中,我们比較具体学习了&q ...

  10. 关于启动调试时,总是启动多个web端口的问题

    在一个解决方案中,经常包含多个web项目,当设置某一个web项目为起始项目后,启动调试,会发现其他的web项目的端口也会一起打开,显示在电脑的右下方,其实开启其他端口有时是没必要的,只是多占用了系统内 ...