本地图片预览(支持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 相关文章推荐
FireFox下XML对象转化成字符串的解决方法
Dec 09 Javascript
Jquery实现三层遍历删除功能代码
Apr 23 Javascript
window.onload和$(function(){})的区别介绍
Oct 30 Javascript
jquery中$each()方法的使用指南
Apr 30 Javascript
完美实现bootstrap分页查询
Dec 09 Javascript
浅谈jQuery animate easing的具体使用方法(推荐)
Jun 17 Javascript
jquery表格datatables实例解析 直接加载和延迟加载
Aug 12 Javascript
浅谈js控制li标签排序问题 js调用php函数的方法
Oct 16 Javascript
javascript判断回文数详解及实现代码
Feb 03 Javascript
jQuery、layer实现弹出层的打开、关闭功能
Jun 28 jQuery
基于JS实现移动端左滑删除功能
Jul 28 Javascript
vue单页面应用打开新窗口显示跳转页面的实例
Sep 21 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
解析关于wamp启动是80端口被占用的问题
2013/06/21 PHP
php中将数组转成字符串并保存到数据库中的函数代码
2013/09/29 PHP
php cookie用户登录的详解及实例代码
2017/01/03 PHP
PHP使用两个栈实现队列功能的方法
2018/01/15 PHP
PHP ADODB生成HTML表格函数rs2html功能【附错误处理函数用法】
2018/05/29 PHP
更正确的asp冒泡排序
2007/05/24 Javascript
Easy.Ajax 部分源代码 支持文件上传功能, 兼容所有主流浏览器
2011/02/24 Javascript
jQuery实现id模糊查询的小例子
2013/03/19 Javascript
javascipt基础内容--需要注意的细节
2013/04/10 Javascript
使用typeof方法判断undefined类型
2014/09/09 Javascript
js实现二代身份证号码验证详解
2014/11/20 Javascript
2014 年最热门的21款JavaScript框架推荐
2014/12/25 Javascript
使用JQuery实现的分页插件分享
2015/11/05 Javascript
JQuery ztree 异步加载实例讲解
2016/02/25 Javascript
JS遍历数组和对象的区别及递归遍历对象、数组、属性的方法详解
2016/06/14 Javascript
JS实现多张图片预览同步上传功能
2017/06/23 Javascript
vue + webpack如何绕过QQ音乐接口对host的验证详解
2018/07/01 Javascript
ES6入门教程之变量的解构赋值详解
2019/04/13 Javascript
js JSON.stringify()基础详解
2019/06/19 Javascript
axios 实现post请求时把对象obj数据转为formdata
2019/10/31 Javascript
vue+koa2搭建mock数据环境的详细教程
2020/05/18 Javascript
[08:44]DOTA2发布会群星聚首 我们都是刀塔人
2014/03/21 DOTA
Python IDE PyCharm的基本快捷键和配置简介
2015/11/04 Python
Python黑魔法@property装饰器的使用技巧解析
2016/06/16 Python
python实现的多线程端口扫描功能示例
2017/01/21 Python
python实现多线程网页下载器
2018/04/15 Python
Python基于Floyd算法求解最短路径距离问题实例详解
2018/05/16 Python
python opencv 实现对图像边缘扩充
2020/01/19 Python
Django 删除upload_to文件的步骤
2020/03/30 Python
新春联欢会主持词
2014/03/24 职场文书
班主任寄语大全
2014/04/04 职场文书
公司年会策划方案
2014/05/17 职场文书
中考标语大全
2014/06/05 职场文书
地震捐款简报
2015/07/21 职场文书
钓鱼岛事件感想
2015/08/11 职场文书
MySQL慢查询优化解决问题
2022/03/17 MySQL