JavaScript实现实时预览type=file上传的图片(IE/Chrome兼容)
需积分: 24 171 浏览量
更新于2024-09-11
收藏 5KB TXT 举报
在HTML5中,处理用户上传的文件类型为"file"时,尤其是在处理图片文件时,实时预览功能是非常实用的。本文主要介绍如何在JavaScript中实现在IE(Internet Explorer)和Chrome浏览器上实现`type=file`选择的图片的实时预览。由于这两种浏览器在处理HTML5 File API的方式上有差异,因此需要编写特定的代码来适应它们。
首先,我们需要了解HTML的部分结构,其中包含一个`<input type="file">`元素,用户可以通过这个元素选择本地文件。这通常在表单中使用,如:
```html
<input type="file" id="fileInput" accept="image/*" onchange="previewFile(this)">
```
这里设置了`accept`属性来限制只能选择图片文件。
然后,引入`PicSwitch.js`脚本,这是一个自定义的JavaScript库,它处理图片预览逻辑。这个库的核心在于利用`FileReader`对象读取用户选择的文件,然后根据浏览器的不同,采用不同的技术进行预览。在IE浏览器中,由于其不支持HTML5的` FileReader.readAsDataURL`方法,我们使用滤镜`filter: progid:DXImageTransform.Microsoft.AlphaImageLoader`来创建一个假的`<img>`元素来显示图片。而对于Firefox及现代浏览器,我们可以直接读取URL并设置`src`属性显示预览。
在CSS中,我们定义了几个容器类,如`#preview_wrapper`用于设置预览区域的样式,`#preview_fake`和`#preview_size_fake`分别用于IE下显示预览图片和获取图片原始尺寸(后者是隐藏的)。在FF下,预览区域`#preview`用于实际显示图片。
具体到JavaScript代码,`previewFile`函数可能如下所示:
```javascript
function previewFile(inputElement) {
var file = inputElement.files[0];
if (!window.FileReader) return;
// 判断浏览器
if (typeof FileReader === 'undefined' || !window.FileReader.prototype.readAsDataURL) {
// IE下处理
var reader = new FileReader();
reader.onload = function(e) {
var imgFake = document.getElementById('preview_fake');
imgFake.src = e.target.result;
};
reader.onerror = function() {
console.error('Error reading file');
};
reader.readAsDataURL(file);
} else {
// FF及现代浏览器处理
var reader = new FileReader();
reader.onload = function(e) {
var imgPreview = document.getElementById('preview');
imgPreview.src = e.target.result;
};
reader.readAsDataURL(file);
}
}
```
这段代码首先检查浏览器是否支持`FileReader`,然后根据支持情况执行不同操作:在IE中,创建`onload`事件处理程序来更新`#preview_fake`的`src`,而在现代浏览器中则直接设置`#preview`的`src`。
通过这种混合使用浏览器特性和JavaScript技巧,我们可以实现在IE和Chrome上对`type=file`选择的图片进行实时预览,提升用户体验。需要注意的是,这种方法并非所有老旧版本的IE都适用,对于完全不支持`FileReader`的IE版本,可能需要额外的兼容性处理。
2020-11-23 上传
2021-05-25 上传
2020-08-29 上传
2020-10-16 上传
点击了解资源详情
2021-11-22 上传
2020-10-26 上传
2023-05-26 上传
ysy198943
- 粉丝: 1
- 资源: 3
最新资源
- transformers:收集资源以深入研究《变形金刚》
- Shopify spy - shopify store parser & scraper-crx插件
- node-friendly-response:进行JSON响应的简单方法
- 致敬页面
- brazilian-flags:显示 ListActivity 和 TypedArrays 的简单 Android 代码。 旧代码迁移至顶级 Android Studio
- chat-test
- 使用Temboo通过Amazon实现简单,健壮的M2M消息传递-项目开发
- 格塔回购
- pg-error-enum:没有运行时相关性的Postgres错误的TypeScript枚举。 还与纯JavaScript兼容
- textbelt:用于发送文本消息的Node.js模块
- SaltStack自动化运维基础教程
- FreeCodeCamp
- BurnSoft.Applications.MGC:My Gun Collection应用程序的主库,其中包含与数据库交互的大多数功能
- CoreFramework:实施全球照明技术的通用核心框架
- 数据库mysql基本操作合集.zip
- auto-decoding-plugin:以OWASP ModSecurity Core Rule Set插件的形式自动解码有效载荷参数