兼容最新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 相关文章推荐
javascript字典探测用户名工具
Oct 05 Javascript
jQuery+PHP实现可编辑表格字段内容并实时保存
Oct 09 Javascript
基于jQuery实现文本框只能输入数字(小数、整数)
Jan 14 Javascript
jQuery实现带水平滑杆的焦点图动画插件
Mar 08 Javascript
JavaScript定义数组的三种方法(new Array(),new Array('x','y')
Oct 04 Javascript
详解jQuery简单的表单应用
Dec 16 Javascript
Angularjs处理页面闪烁的解决方法
Mar 09 Javascript
ES6新特性之解构、参数、模块和记号用法示例
Apr 01 Javascript
解决bootstrap下拉菜单点击立即隐藏bug的方法
Jun 13 Javascript
在vue组件中使用axios的方法
Mar 16 Javascript
Vue 动态组件components和v-once指令的实现
Aug 30 Javascript
vue中实现动态生成二维码的方法
Feb 21 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
CPU步进是什么意思?i3-9100F B0步进和U0步进区别知识科普
2020/03/17 数码科技
php如何连接sql server
2015/10/16 PHP
thinkphp关于简单的权限判定方法
2017/04/03 PHP
浅谈php(codeigniter)安全性注意事项
2017/04/06 PHP
php实现和c#一致的DES加密解密实例
2017/07/24 PHP
解读IE和firefox下JScript和HREF的执行顺序
2008/01/12 Javascript
Struts2的s:radio标签使用及用jquery添加change事件
2013/04/08 Javascript
javascript中onclick(this)用法介绍
2013/04/19 Javascript
控制文字内容的显示与隐藏示例
2014/06/11 Javascript
jquery库文件略庞大用纯js替换jquery的方法
2014/08/12 Javascript
20个实用的JavaScript技巧分享
2014/11/28 Javascript
Vuejs 页面的区域化与组件封装的实现
2017/09/11 Javascript
详解Vue2 SSR 缓存 Api 数据
2017/11/20 Javascript
微信小程序之圆形进度条实现思路
2018/02/22 Javascript
深入理解Vue父子组件生命周期执行顺序及钩子函数
2018/08/12 Javascript
vue项目搭建以及全家桶的使用详细教程(小结)
2018/12/19 Javascript
Vue数据绑定实例写法
2019/08/06 Javascript
JS实现普通轮播图特效
2020/01/01 Javascript
Vue3 实现双盒子定位Overlay的示例
2020/12/22 Vue.js
python中文分词教程之前向最大正向匹配算法详解
2017/11/02 Python
Python Socket编程之多线程聊天室
2018/07/28 Python
python实现移位加密和解密
2019/03/22 Python
Python数据类型之列表和元组的方法实例详解
2019/07/08 Python
PyQt5 文本输入框自动补全QLineEdit的实现示例
2020/05/13 Python
python两种注释用法的示例
2020/10/09 Python
python实现图片转字符画
2021/02/19 Python
css3实现3D文本悬停改变效果的示例代码
2019/01/16 HTML / CSS
详解通过变换矩阵实现canvas的缩放功能
2019/01/14 HTML / CSS
巴西补充剂和维生素购物网站:Natue
2019/06/17 全球购物
英国100%防污和防水的靴子:Muck Boot Company
2020/09/08 全球购物
俄罗斯首家面向中国消费者的一站式购物网站:Wruru
2020/05/08 全球购物
大专毕业生自我鉴定
2013/11/21 职场文书
选秀节目策划方案
2014/06/06 职场文书
建筑工地大门标语
2014/06/18 职场文书
领导班子民主生活会整改措施(工商局)
2014/09/21 职场文书
美德少年事迹材料(2016推荐版)
2016/02/25 职场文书