本地图片预览(支持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 相关文章推荐
json数据的列循环示例
Sep 06 Javascript
JavaScript设置获取和设置属性的方法
Mar 04 Javascript
jQuery创建自定义的选择器用以选择高度大于100的超链接实例
Mar 18 Javascript
javascript基于DOM实现权限选择实例分析
May 14 Javascript
jquery实现简洁文件上传表单样式
Nov 02 Javascript
JavaScript SHA512加密算法详细代码
Oct 06 Javascript
JS实现的全排列组合算法示例
Oct 09 Javascript
jquery实现搜索框功能实例详解
Jul 23 jQuery
微信小程序实现单选选项卡切换效果
Jun 19 Javascript
vue过滤器用法实例分析
Mar 15 Javascript
node实现爬虫的几种简易方式
Aug 22 Javascript
vue本地打开build后生成的dist文件夹index.html问题
Sep 04 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
PHP常用技巧总结(附函数代码)
2012/02/04 PHP
使用ThinkPHP+Uploadify实现图片上传功能
2014/06/26 PHP
PHP开发注意事项总结
2015/02/04 PHP
轻松掌握php设计模式之访问者模式
2016/09/23 PHP
[原创]PHP实现生成vcf vcard文件功能类定义与使用方法详解【附demo源码下载】
2017/09/02 PHP
PDO::errorCode讲解
2019/01/28 PHP
理解Javascript_11_constructor实现原理
2010/10/18 Javascript
一个基于jquery的文本框记数器
2012/09/19 Javascript
简易js代码实现计算器操作
2013/04/15 Javascript
jquery原创弹出层折叠效果点击折叠弹出一个层
2014/03/12 Javascript
深入浅析NodeJs并发异步的回调处理
2015/12/21 NodeJs
jQuery实现简单倒计时功能的方法
2016/07/04 Javascript
后端接收不到AngularJs中$http.post发送的数据原因分析及解决办法
2016/07/05 Javascript
详解webpack 如何集成第三方js库
2017/06/29 Javascript
深入研究jQuery图片懒加载 lazyload.js使用方法
2017/08/16 jQuery
如何为vue的项目添加单元测试
2018/12/19 Javascript
vue使用自定义事件的表单输入组件用法详解【日期组件与货币组件】
2020/06/01 Javascript
JavaScript常用进制转换及位运算实例解析
2020/10/14 Javascript
[04:03]DOTA2肉山黑名单梦之声 风暴之灵中文配音鉴赏
2013/07/03 DOTA
详解Python的Django框架中的中间件
2015/07/24 Python
Python中在脚本中引用其他文件函数的实现方法
2016/06/23 Python
python简单贪吃蛇开发
2019/01/28 Python
python 并发下载器实现方法示例
2019/11/22 Python
python找出列表中大于某个阈值的数据段示例
2019/11/24 Python
python多线程实现同时执行两个while循环的操作
2020/05/02 Python
基于Python爬取股票数据过程详解
2020/10/21 Python
Django-celery-beat动态添加周期性任务实现过程解析
2020/11/26 Python
泰国网上购物:Shopee泰国
2018/09/14 全球购物
意大利在线购买隐形眼镜网站:VisionDirect.it
2019/03/18 全球购物
Ruby如何进行文件操作
2014/07/17 面试题
日语求职信范文
2013/12/17 职场文书
物流专员岗位职责
2014/02/17 职场文书
公司联欢会策划方案
2014/05/19 职场文书
课外活动总结范文
2014/07/09 职场文书
MySQL库表名大小写的选择
2021/06/05 MySQL
Nginx四层负载均衡的配置指南
2021/06/11 Servers