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. ipad pro注定是失败的!

    ipad pro注定是失败的! 把一个玩具操作系统装在生产力工具上就能产生生产力了? so young so simple!

  2. ORA-12638: 无法检索身份证明 解决的方法

    the NTS option makes the Oracle client attempt to use your current Windows domain credentials to aut ...

  3. Linux对于录音

    一.原理简介 在Linux下,记录--从dsp读取数据.播放--至dsp设备写入数据. 开发板採用声卡UDA1341实现音频编解码,完毕A/D和D/A转换,芯片UDA1341与CPU的连接图例如以下: ...

  4. mysql 在创建批处理脚本日志表信息

    mysql在批处理脚本通过存储过程如下所示创建日志信息表: drop PROCEDURE if EXISTS reqSp; DELIMITER // create procedure reqSp(sT ...

  5. springmvc+ztree v3实现类似表单回显功能

    在做权限管理系统时,可能会用到插件zTree v3,这是一个功能丰富强大的前端插件,应用很广泛,如异步加载菜单制作.下拉选择.权限分配等.在集成SpringMVC中,我分别实现了zTree的添删改查, ...

  6. JS function立即调用的几种写法

    //立即执行 (function () { alert(1) })() //立即执行 !function () { alert(1) }() //立即执行 +function () { alert(1 ...

  7. EasyUI基础入门之Resiable(可缩放)

    easyui的base插件学习已经进行到Resizable(可缩放)了.照旧看看easyui官网的API. Resiable 正如其字面意思一样(可伸缩),resiable主要是将一些html元素扩展 ...

  8. 【iOS发展-70】点菜系统案例:使用文本框inputView和inputAccessoryView串联UIPickerView、UIDatePicker和UIToolBar

    (1)效果 (2)先在storyboard中设计界面,然后源码(直接在ViewController中码) #import "ViewController.h" @interface ...

  9. 使用excel微调button调整日期

    笔者:iamlaosong excel提供了一个调整的数字button.用来调节单元格增加或减少数量.因为它需要值是0-30000.所以不能直接用其调节日期.但能够使用"初始日期+调节值&q ...

  10. 基于Servlet、JSP、JDBC、MySQL登录模块(包括使用的过滤器和配置)

    遇见前文的注冊模块,本篇是登录模块.主要包含登录主界面,和登录相关编写的LoginAction.LoginDao和LoginService.以及配置的Filter.以下按逻辑顺序记录具体过程和代码: ...