Html5 FileReader实现即时上传图片功能实例代码


Posted in HTML / CSS onSeptember 01, 2014

下面的是在ie9下面实现的预览,跟ie8还是不一样的,不过我记得貌似ie8好像也是利用了fiter的功能,因为项目只要求在ie9以上,所以就没有写出ie8的啦

复制代码
代码如下:

<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Document</title>
</head>
<body>
<p><style type="text/css">
#kk{
width:400px;
height:400px;
overflow: hidden;
}
#preview_wrapper{
width:300px;
height:300px;
background-color:#CCC;
overflow: hidden;
}
#preview_fake{ /* 该对象用于在IE下显示预览图片 */
filter:progid:DXImageTransform.Microsoft.AlphaImageLoader(sizingMethod=scale);
width:300px;
overflow: hidden;
}
#preview_size_fake{ /* 该对象只用来在IE下获得图片的原始尺寸,无其它用途 */
filter:progid:DXImageTransform.Microsoft.AlphaImageLoader(sizingMethod=image);
width:300px;
visibility:hidden;
overflow: hidden;
}
#preview{ /* 该对象用于在FF下显示预览图片 */
width:300px;
height:300px;
overflow: hidden;
}
</style><script type="text/javascript">
function onUploadImgChange(sender){
if( !sender.value.match( /.jpg|.gif|.png|.bmp/i ) ){
alert('图片格式无效!');
return false;
}
var objPreview = document.getElementById('preview');
var objPreviewFake = document.getElementById('preview_fake');
var objPreviewSizeFake = document.getElementById('preview_size_fake');
if( sender.files && sender.files[0] ){ //这里面就是chrome和ff可以兼容的了
objPreview.style.display = 'block';
objPreview.style.width = 'auto';
objPreview.style.height = 'auto';
// Firefox 因安全性问题已无法直接通过 input[file].value 获取完整的文件路径
objPreview.src = sender.files[0].getAsDataURL();
}else if( objPreviewFake.filters ){
// IE7,IE8 在设置本地图片地址为 img.src 时出现莫名其妙的后果
//(相同环境有时能显示,有时不显示),因此只能用滤镜来解决
// IE7, IE8因安全性问题已无法直接通过 input[file].value 获取完整的文件路径
sender.select();
sender.blur();
var imgSrc = document.selection.createRange().text;
objPreviewFake.filters.item('DXImageTransform.Microsoft.AlphaImageLoader').src = imgSrc;
objPreviewSizeFake.filters.item('DXImageTransform.Microsoft.AlphaImageLoader').src = imgSrc;
alert("已成功选择图片!");
alert(objPreviewSizeFake.offsetWidth);
autoSizePreview( objPreviewFake,objPreviewSizeFake.offsetWidth, objPreviewSizeFake.offsetHeight );
objPreview.style.display = 'none';
}
}
function onPreviewLoad(sender){
autoSizePreview( sender, sender.offsetWidth, sender.offsetHeight );
}
function autoSizePreview( objPre, originalWidth, originalHeight ){
var zoomParam = clacImgZoomParam( 300, 300, originalWidth, originalHeight );
objPre.style.width = zoomParam.width + 'px';
objPre.style.height = zoomParam.height + 'px';
objPre.style.marginTop = zoomParam.top + 'px';
objPre.style.marginLeft = zoomParam.left + 'px';
}
function clacImgZoomParam( maxWidth, maxHeight, width, height ){
var param = { width:width, height:height, top:0, left:0 };
if( width>maxWidth || height>maxHeight ){
rateWidth = width / maxWidth;
rateHeight = height / maxHeight;
if( rateWidth > rateHeight ){
param.width = maxWidth;
param.height = height / rateWidth;
}else{
param.width = width / rateHeight;
param.height = maxHeight;
}
}
param.left = (maxWidth - param.width) / 2;
param.top = (maxHeight - param.height) / 2;
return param;
}
</script> <input name="localfile" type="file" id="localfile" size="28" onchange="onUploadImgChange(this)"/> <!--以下是预览图片用的-->
<div id="kk">
<div id="preview_wrapper">
<div id="preview_fake">
<img id="preview" src="" onload="onPreviewLoad(this)"/>
</div>
</div>
<br/>
<img id="preview_size_fake" />
</div></p>
</body>
</html>
HTML / CSS 相关文章推荐
CSS3新属性transition-property transform box-shadow实例学习
Jun 06 HTML / CSS
CSS3文本换行word-wrap解决英文文本超过固定宽度不换行
Oct 10 HTML / CSS
CSS3的一个简单导航栏实现
Aug 03 HTML / CSS
利用CSS3实现开门效果实例源码
Aug 22 HTML / CSS
涂鸦板简单实现 Html5编写属于自己的画画板
Jul 05 HTML / CSS
Html5新标签解释及用法
Feb 17 HTML / CSS
HTML5之HTML元素扩展(上)—新增加的元素及使用概述
Jan 31 HTML / CSS
使用jquery实现HTML5响应式导航菜单教程
Apr 02 HTML / CSS
HTML5 Web缓存和运用程序缓存(cookie,session)
Jan 11 HTML / CSS
HTML5 常见面试题之PC端和移动端区别介绍
Jan 22 HTML / CSS
html5跳转小程序wx-open-launch-weapp踩坑
Dec 02 HTML / CSS
CSS3实现列表无限滚动/轮播效果
Jun 23 HTML / CSS
html5定位获取当前位置并在百度地图上显示
Aug 22 #HTML / CSS
HTML5 transform三维立方体实现360无死角三维旋转效果
Aug 22 #HTML / CSS
html5 更新图片颜色示例代码
Jul 29 #HTML / CSS
Html5 语法与规则简要概述
Jul 29 #HTML / CSS
html5桌面通知(Web Notifications)实例解析
Jul 07 #HTML / CSS
HTML5实现WebSocket协议原理浅析
Jul 07 #HTML / CSS
HTML5新增的表单元素和属性实例解析
Jul 07 #HTML / CSS
You might like
PHP如何抛出异常处理错误
2011/03/02 PHP
关于crontab的使用详解
2013/06/24 PHP
PHP合并discuz用户脚本的方法
2015/08/04 PHP
PHP 中常量的知识整理
2017/04/14 PHP
thinkPHP利用ajax异步上传图片并显示、删除的示例
2018/09/26 PHP
基于jquery的无缝循环新闻列表插件
2011/03/07 Javascript
javascript使用switch case实现动态改变超级链接文字及地址
2014/12/16 Javascript
jQuery实现菜单式图片滑动切换
2015/03/14 Javascript
跟我学习javascript的prototype,getPrototypeOf和__proto__
2015/11/17 Javascript
JavaScript中push(),join() 函数 实例详解
2016/09/06 Javascript
微信小程序  wx.request合法域名配置详解
2016/11/23 Javascript
详解在vue-cli中使用路由
2017/09/25 Javascript
layui中select,radio设置不生效的解决方法
2019/09/05 Javascript
浅谈vue中组件绑定事件时是否加.native
2019/11/09 Javascript
原生js实现点击按钮复制内容到剪切板
2020/11/19 Javascript
js实现验证码干扰(动态)
2021/02/23 Javascript
[06:07]辉夜杯现场观众互动 “比谁远送显示器”
2015/12/26 DOTA
解决pyqt中ui编译成窗体.py中文乱码的问题
2016/12/23 Python
Python写的一个定时重跑获取数据库数据
2016/12/28 Python
Python实现读取txt文件中的数据并绘制出图形操作示例
2019/02/26 Python
使用python检查yaml配置文件是否符合要求
2020/04/09 Python
Python实现一个简单的毕业生信息管理系统的示例代码
2020/06/08 Python
Python类super()及私有属性原理解析
2020/06/15 Python
美国电视购物HSN官网:HSN
2016/09/07 全球购物
台湾菁英交友:结识黄金单身的台湾人
2018/01/22 全球购物
365 Tickets英国:全球景点门票
2019/07/06 全球购物
STP的判定过程
2012/10/01 面试题
护士辞职信范文
2014/01/19 职场文书
端午节活动策划方案
2014/03/09 职场文书
文案策划求职信
2014/03/18 职场文书
奥利奥广告词
2014/03/20 职场文书
离婚协议书怎么写
2014/09/12 职场文书
抗洪救灾标语
2014/10/08 职场文书
员工工作能力评语
2014/12/31 职场文书
2015年学校党支部工作总结
2015/04/01 职场文书
上诉状格式
2015/05/23 职场文书