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. Notification使用以及PendingIntent.getActivity() (转)

    public void sendNotification(Context ctx,String message) { //get the notification manager String ns ...

  2. (大数据工程师学习路径)第一步 Linux 基础入门----命令执行顺序控制与管道

    介绍 顺序执行.选择执行.管道.cut 命令.grep 命令.wc 命令.sort 命令等,高效率使用 Linux 的技巧. 一.命令执行顺序的控制 1.顺序执行多条命令 通常情况下,我们每次只能在终 ...

  3. MySQL分页实现

    mysql> select pname from product; +--------+ | pname  | +--------+ | 产品1  | | 产品2  | | 产品三 | +--- ...

  4. PHP开发笔记

    PHP开发笔记 JSON数据的解析 $json_data = isset($_GET['json_data']) ? $_GET['json_data'] : null; $json_data=str ...

  5. hdu 4975 最大流问题解决队伍和矩阵,利用矩阵dp优化

    //刚開始乱搞. //网络流求解,假设最大流=全部元素的和则有解:利用残留网络推断是否唯一, //方法有两种,第一种是深搜看看是否存在正边权的环.见上一篇4888 //至少四个点构成的环,另外一种是用 ...

  6. ABP应用层——数据传输对象(DTOs)

    ABP应用层——数据传输对象(DTOs) 基于DDD的现代ASP.NET开发框架--ABP系列之16.ABP应用层——数据传输对象(DTOs) ABP是“ASP.NET Boilerplate Pro ...

  7. jdk1.7 变更

    个人实遇: 1.6与1.7 :SimpleDateFormat,1.6要求yyyy必须小写,1.7兼容大小写: jdk 8 新特性: 官方pdf文档(英文版)私人下载地址:http://pan.bai ...

  8. Flex 日志管理

    在Flex中调试方法有两种: 一是用trace()函数,在flex builder中进行调试: 二是用logTarget类,例如以下代码: // Create a target. var logTar ...

  9. Webserver管理系列:3、Windows Update

    微软的操作系统可以使用用户过程中发现了一些漏洞,因此,他们经常发布一些系统补丁.因此,我们需要自己主动安装更新功能后,打开系统. 默认的更新功能未开启自己主动: 开启自己主动更新功能后.Windows ...

  10. FPGA 异步时钟处理方

    1 假设FPGA设计,包括不同的频率的时钟,它会发出涉及异步时钟. 我们需要一些方法来使时钟同步,从而保证FPGA可靠性设计. 2 在建立和保持时间所构成的有效时间窗体内,数据输入到触发器进行转换. ...