兼容最新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 相关文章推荐
Prototype使用指南之array.js
Jan 10 Javascript
FileUpload 控件 禁止手动输入或粘贴的实现代码
Apr 07 Javascript
6款新颖的jQuery和CSS3进度条插件推荐
Mar 05 Javascript
jquery链式操作的正确使用方法
Jan 06 Javascript
总结十个Angular.js由浅入深的面试问题
Aug 26 Javascript
jQuery插件FusionCharts实现的2D柱状图效果示例【附demo源码下载】
Mar 06 Javascript
jquery append与appendTo方法比较
May 24 jQuery
node.js中grunt和gulp的区别详解
Jul 17 Javascript
Vue 拦截器对token过期处理方法
Jan 23 Javascript
详解ES6中的 Set Map 数据结构学习总结
Nov 06 Javascript
基于 jQuery 实现键盘事件监听控件
Apr 04 jQuery
JS动态显示倒计时效果
Dec 12 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读取msn上的用户信息类
2008/12/05 PHP
PHP的引用详解
2015/02/22 PHP
PHP使用stream_context_create()模拟POST/GET请求的方法
2016/04/02 PHP
PHP实现在windows下配置sendmail并通过mail()函数发送邮件的方法
2017/06/20 PHP
PHP匿名函数(闭包函数)详解
2019/03/22 PHP
在myeclipse中如何加入jquery代码提示功能
2014/06/03 Javascript
Javascript刷新窗口方法小结
2015/10/21 Javascript
JS判断iframe是否加载完成的方法
2016/08/03 Javascript
漂亮实用的页面loading(加载)封装代码
2017/02/03 Javascript
微信小程序使用image组件显示图片的方法【附源码下载】
2017/12/08 Javascript
js+html5实现手机九宫格密码解锁功能
2018/07/30 Javascript
详解如何在vue项目中使用lodop打印插件
2018/09/27 Javascript
Vue-CLI与Vuex使用方法实例分析
2020/01/06 Javascript
浅析JS中NEW的实现原理及重写
2020/02/20 Javascript
微信小程序入门之绘制时钟
2020/10/22 Javascript
[03:14]DOTA2斧王 英雄基础教程
2013/11/26 DOTA
使用Python编写类UNIX系统的命令行工具的教程
2015/04/15 Python
python实现逻辑回归的方法示例
2017/05/02 Python
TensorFLow用Saver保存和恢复变量
2018/03/10 Python
python代码过长的换行方法
2018/07/19 Python
Python之pymysql的使用小结
2019/07/01 Python
对Pytorch中Tensor的各种池化操作解析
2020/01/03 Python
Python 列表中的修改、添加和删除元素的实现
2020/06/11 Python
解决Keras中CNN输入维度报错问题
2020/06/29 Python
html5 迷宫游戏(碰撞检测)实例一
2013/07/25 HTML / CSS
欧洲领先的电子和电信零售商和服务提供商:Currys PC World Business
2017/12/05 全球购物
澳大利亚最便宜的网上药房:Chemist Warehouse
2020/01/30 全球购物
银行个人求职自荐信范文
2013/12/16 职场文书
无故旷工检讨书
2014/01/26 职场文书
珠宝的促销活动方案
2014/08/31 职场文书
乡镇干部个人对照检查材料思想汇报(原创篇)
2014/09/28 职场文书
副总经理岗位职责范本
2014/09/30 职场文书
求职简历自荐信怎么写
2015/03/26 职场文书
国际贸易实训总结
2015/08/03 职场文书
社区服务活动感想
2015/08/11 职场文书
如何利用opencv判断两张图片是否相同详解
2021/07/07 Python