本地图片预览(支持IE6/IE7/IE8/Firefox3)经验总结


Posted in Javascript onMarch 25, 2013

最近在Web项目开发过程中遇到的本地图片预览的需求,虽然最后因为其他原因没能使用,但是也算有些了解,整理出来。

这里我们按浏览器分,主要包括IE6,IE7/8 和Firefox3, 不包含Opera,Safari和Chrome,这三个基本上需求很小,没有研究。

总结一下就是
IE6下可以直接从file的value获取图片路径来显示预览。
IE7和IE8下通过select获取file的图片路径,再用滤镜来显示预览。
FireFox下调用file的getAsDataURL方法获取Data URI数据来显示预览。

下面是一个完整的Demo:

<html> 
<head> 
<script src="http://deepliquid.com/projects/Jcrop/js/jquery.min.js"></script> 
</head> 
<body> 
<input type="file" id="picture" name="picture" size="35" value="" onchange="setImg(this)"/> 
<div id="preview_fake" style="margin-left: 50px"> 
</div> 
<img id="preview_size_fake"/> 
<style type="text/css"> 
#preview_fake{ 
/* 该对象用于在IE下显示预览图片 
*/ 
filter:progid:DXImageTransform.Microsoft.AlphaImageLoader(sizingMethod=scale); 
} 
#preview_size_fake{ 
/* 该对象只用来在IE下获得图片的原始尺寸,无其它用途 
*/ 
filter:progid:DXImageTransform.Microsoft.AlphaImageLoader(sizingMethod=image); 
visibility:hidden; 
} 
</style> 
<script type="text/javascript"> 
function setImg(obj){ 
if( !obj.value.match( /.jpg|.gif|.png|.bmp/i ) ){ 
alert('图片格式无效!'); 
return false; 
} 
$("#preview_fake").empty(); 
var img = document.createElement("img"); 
img.setAttribute("src", ""); 
img.setAttribute("id", "preview"); 
document.getElementById("preview_fake").appendChild(img); 
if($.browser.msie){ 
if($.browser.version == 6.0){ 
$("#preview").attr("src",obj.value); 
}else{ 
var objPreview = document.getElementById('preview' ); 
var objPreviewFake = document.getElementById('preview_fake' ); 
var objPreviewSizeFake = document.getElementById('preview_size_fake' ); 
obj.select(); 
var imgSrc =document.selection.createRange().text; 
objPreviewFake.filters.item('DXImageTransform.Microsoft.AlphaImageLoader').src= imgSrc; 
objPreviewSizeFake.filters.item('DXImageTransform.Microsoft.AlphaImageLoader').src= imgSrc; 
autoSizePreview(objPreviewFake,objPreviewSizeFake.offsetWidth,objPreviewSizeFake.offsetHeight ); 
objPreview.style.display ='none'; 
} 
} 
if($.browser.mozilla){ 
$("#preview").attr("src",obj.files[0].getAsDataURL()); 
} 
if($.browser.opera){ 
alert("暂时不支持Opera浏览器"); 
} 
if($.browser.safari){ 
alert("暂时不支持Safari浏览器"); 
} 
} 
</script> 
</body> 
</html>
Javascript 相关文章推荐
javascript贪吃蛇完整版(源码)
Dec 09 Javascript
jquery将一个表单序列化为一个对象的方法
Jan 03 Javascript
jquery实现页面关键词高亮显示的方法
Mar 12 Javascript
基于jQuery仿淘宝产品图片放大镜特效
Oct 19 Javascript
javascript HTML5 Canvas实现圆盘抽奖功能
Apr 11 Javascript
为JQuery EasyUI 表单组件增加焦点切换功能的方法
Apr 13 jQuery
关于vue-router路径计算问题
May 10 Javascript
Angular4 ElementRef的应用
Feb 26 Javascript
解决vue单页面应用中动态修改title问题
Jun 09 Javascript
vue2.0+SVG实现音乐播放圆形进度条组件
Sep 21 Javascript
jQuery实现的图片点击放大缩小功能案例
Jan 02 jQuery
JavaScript实现H5接金币功能(实例代码)
Feb 22 Javascript
JS上传前预览图片实例
Mar 25 #Javascript
js实现杯子倒水问题自动求解程序
Mar 25 #Javascript
js实现上传图片之上传前预览图片
Mar 25 #Javascript
使用jQuery validate 验证注册表单实例演示
Mar 25 #Javascript
多个表单中如何获得这个文件上传的网址实现js代码
Mar 25 #Javascript
jquery中使用$(#form).submit()重写提交表单无效原因分析及解决
Mar 25 #Javascript
博客侧边栏模块跟随滚动条滑动固定效果的实现方法(js+jquery等)
Mar 24 #Javascript
You might like
使用CodeIgniter的类库做图片上传
2014/06/12 PHP
PHP文件锁定写入实例解析
2014/07/14 PHP
PHP中使用php5-ffmpeg撷取视频图片实例
2015/01/07 PHP
PHP实现自动对图片进行滚动显示的方法
2015/03/12 PHP
php实现encode64编码类实例
2015/03/24 PHP
PHP内置函数生成随机数实例
2019/01/18 PHP
关于jQuery参考实例 1.0 jQuery的哲学
2013/04/07 Javascript
jquery indexOf使用方法
2013/08/19 Javascript
javascript实现在某个元素上阻止鼠标右键事件的方法和实例
2014/08/12 Javascript
jQuery+css3实现文字跟随鼠标的上下抖动
2015/07/31 Javascript
JavaScript节点及列表操作实例小结
2015/08/05 Javascript
JavaScript递归操作实例浅析
2016/10/31 Javascript
JS/jquery实现一个网页内同时调用多个倒计时的方法
2017/04/27 jQuery
vue中使用sessionStorage记住密码功能
2018/07/24 Javascript
微信小程序实现通过双向滑动缩放图片大小的方法
2018/12/30 Javascript
JS匿名函数内部this指向问题详析
2019/05/10 Javascript
JavaScript前端实现压缩图片功能
2020/03/06 Javascript
js实现有趣的倒计时效果
2021/01/19 Javascript
[02:39]DOTA2英雄基础教程 天怒法师
2013/11/29 DOTA
[07:59]2014DOTA2叨叨刀塔 林熊猫称被邀请赛现场盛况震撼
2014/07/21 DOTA
[01:11:21]DOTA2-DPC中国联赛 正赛 VG vs Elephant BO3 第一场 3月6日
2021/03/11 DOTA
Python用imghdr模块识别图片格式实例解析
2018/01/11 Python
python os.path模块常用方法实例详解
2018/09/16 Python
NLTK 3.2.4 环境搭建教程
2018/09/19 Python
解决Pyinstaller 打包exe文件 取消dos窗口(黑框框)的问题
2019/06/21 Python
Python中的类与类型示例详解
2019/07/10 Python
python递归调用中的坑:打印有值, 返回却None
2020/03/16 Python
tensorflow实现残差网络方式(mnist数据集)
2020/05/26 Python
Anaconda使用IDLE的实现示例
2020/09/23 Python
如何用Python徒手写线性回归
2021/01/25 Python
HTML5之SVG 2D入门9—蒙板及mask元素介绍与应用
2013/01/30 HTML / CSS
查找廉价航班和发现新目的地:Kiwi.com
2019/02/25 全球购物
Bugatchi官方网站:男士服装在线
2019/04/10 全球购物
单位承诺书格式
2014/05/21 职场文书
农村环境卫生倡议书
2015/04/29 职场文书
Python极值整数的边界探讨分析
2021/09/15 Python