兼容最新firefox、chrome和IE的javascript图片预览实现代码


Posted in Javascript onAugust 08, 2014

javascript实现客户端file选择文件后img标签加载客户端图片实现图片预览。

测试浏览器:firefox6,firefox12,chrome 25.0.1364.172 m,IE6-IE10 都兼容

safari5.0.4不支持FileReader和file.files.item(0).getAsDataURL方法,暂时无解,需要上传到服务器后返回临时文件名用img标签加载,不知道后续的safari版本是否支持FileReader对象。

IE10下效果:

兼容最新firefox、chrome和IE的javascript图片预览实现代码

IE9下效果:

兼容最新firefox、chrome和IE的javascript图片预览实现代码

实现源代码:

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="content-type" content="txt/html;charset=utf-8" />
<title>javascript实现IE,firefox客户端图片预览</title>
<script>
 //使用IE条件注释来判断是否IE6,通过判断userAgent不一定准确
 if (document.all) document.write('<!--[if lte IE 6]><script type="text/javascript">window.ie6= true<\/script><![endif]-->');
 // var ie6 = /msie 6/i.test(navigator.userAgent);//不推荐,有些系统的ie6 userAgent会是IE7或者IE8
 function change(picId,fileId) {
  var pic = document.getElementById(picId);
  var file = document.getElementById(fileId);
  if(window.FileReader){//chrome,firefox7+,opera,IE10,IE9,IE9也可以用滤镜来实现
   oFReader = new FileReader();
   oFReader.readAsDataURL(file.files[0]);
   oFReader.onload = function (oFREvent) {pic.src = oFREvent.target.result;};  
  }
  else if (document.all) {//IE8-
   file.select();
   var reallocalpath = document.selection.createRange().text//IE下获取实际的本地文件路径
   if (window.ie6) pic.src = reallocalpath; //IE6浏览器设置img的src为本地路径可以直接显示图片
   else { //非IE6版本的IE由于安全问题直接设置img的src无法显示本地图片,但是可以通过滤镜来实现,IE10浏览器不支持滤镜,需要用FileReader来实现,所以注意判断FileReader先
    pic.style.filter = "progid:DXImageTransform.Microsoft.AlphaImageLoader(sizingMethod='image',src=\"" + reallocalpath + "\")";
    pic.src = 'data:image/gif;base64,R0lGODlhAQABAIAAAP///wAAACH5BAEAAAAALAAAAAABAAEAAAICRAEAOw==';//设置img的src为base64编码的透明图片,要不会显示红xx
   }
  }
  else if (file.files) {//firefox6-
   if (file.files.item(0)) {
    url = file.files.item(0).getAsDataURL();
    pic.src = url;
   }
  }
 }
</script>
</head>
<body>
<form name="form1" enctype="multipart/form-data"><table><tr>
<td> 草图1:</td>
<td >
<input type="file" name="file1" id="file1" onchange="change('pic1','file1')">
</td>
<tr>
<td>草图浏览1:</td>
<td>
<img src="images/px.gif" id="pic1" >
</td></tr><tr>
<td> 草图2:</td>
<td >
<input type="file" name="file2" id="file2" onchange="change('pic2','file2')">
</td>
<tr>
<td>草图浏览2:</td>
<td>
<img src="images/px.gif" id="pic2" >
</td></tr>
</table>
</form>
</body>
</html>
Javascript 相关文章推荐
jquery ready函数源代码研究
Dec 06 Javascript
JS 无限级 Select效果实现代码(json格式)
Aug 30 Javascript
AngularJS基础 ng-click 指令示例代码
Aug 01 Javascript
JS用斜率判断鼠标进入DIV四个方向的方法
Nov 07 Javascript
AngularJS基于ui-route实现深层路由的方法【路由嵌套】
Dec 14 Javascript
纯js模仿windows系统日历
Feb 04 Javascript
基于bootstrop常用类总结(推荐)
Sep 11 Javascript
微信小程序页面缩放式侧滑效果的实现代码
Nov 15 Javascript
Cocos2d实现刮刮卡效果
Dec 20 Javascript
uni-app之APP和小程序微信授权方法
May 09 Javascript
Vue实现将数据库中带html标签的内容输出(原始HTML(Raw HTML))
Oct 28 Javascript
React组件设计模式之组合组件应用实例分析
Apr 29 Javascript
js调试工具console.log()方法查看js代码的执行情况
Aug 08 #Javascript
JS创建类和对象的两种不同方式
Aug 08 #Javascript
将HTML格式的String转化为HTMLElement的实现方法
Aug 07 #Javascript
jquery datatable后台封装数据示例代码
Aug 07 #Javascript
jquery对象和javascript对象即DOM对象相互转换
Aug 07 #Javascript
js判断当页面无法回退时关闭网页否则就history.go(-1)
Aug 07 #Javascript
js和jquery设置disabled属性为true使按钮失效
Aug 07 #Javascript
You might like
php使用递归计算文件夹大小
2014/12/24 PHP
php使用fputcsv()函数csv文件读写数据的方法
2015/01/06 PHP
朋友网关于QQ相关的PHP代码(研究QQ的绝佳资料)
2015/01/26 PHP
Zend Framework基本页面布局分析
2016/03/19 PHP
php框架CodeIgniter使用redis的方法分析
2018/04/13 PHP
农历与西历对照
2006/09/06 Javascript
JQuery UI的拖拽功能实现方法小结
2012/03/14 Javascript
基于jquery中children()与find()的区别介绍
2013/04/26 Javascript
JS 面向对象之继承---多种组合继承详解
2016/07/10 Javascript
详解js的延迟对象、跨域、模板引擎、弹出层、AJAX【附实例下载】
2016/12/19 Javascript
JS中offset和匀速动画详解
2018/02/06 Javascript
vue+VeeValidate 校验范围实例详解(部分校验,全部校验)
2018/10/19 Javascript
原生js实现碰撞检测
2020/03/12 Javascript
[05:31]干嘛呢兄弟!DOTA2 TI9语音轮盘部分出处
2019/05/14 DOTA
在Linux下调试Python代码的各种方法
2015/04/17 Python
Python在Console下显示文本进度条的方法
2016/02/14 Python
Python简单的制作图片验证码实例
2017/05/31 Python
python中实现数组和列表读取一列的方法
2018/04/03 Python
django自带serializers序列化返回指定字段的方法
2019/08/21 Python
Python的对象传递与Copy函数使用详解
2019/12/26 Python
python 通过邮件控制实现远程控制电脑操作
2020/03/16 Python
使用CSS3的rem属性制作响应式页面布局的要点解析
2016/05/24 HTML / CSS
日本最大的旅游网站:Rakuten Travel(乐天旅游)
2018/08/02 全球购物
马来西亚最大的在线隐形眼镜商店:MrLens
2019/03/27 全球购物
《蚂蚁和蝈蝈》教学反思
2014/02/24 职场文书
省级优秀毕业生主要事迹
2014/05/29 职场文书
诚信贷款承诺书
2014/05/30 职场文书
2014年工程部工作总结
2014/11/25 职场文书
简单的个人租房协议书范本
2014/11/26 职场文书
导师对论文的学术评语
2015/01/04 职场文书
2015年法制宣传月活动总结
2015/03/26 职场文书
中小学教师继续教育心得体会
2016/01/19 职场文书
小数乘法教学反思
2016/02/22 职场文书
如何利用STAR法则制作留学文书?
2019/08/26 职场文书
Go使用协程交替打印字符
2021/04/29 Golang
Android使用EventBus发送消息,Fragment中接收消息的方法会执行多次
2022/04/24 Java/Android