使用jQuery在上传前预览图片的完整攻略可以分为以下几个步骤:
- HTML结构
首先,在HTML结构中需要添加一个用于显示图片的元素,如下所示:
<div>
<input type="file" id="uploadImage" accept="image/*">
<br>
<img id="preview" src="placeholder.png" alt="image preview" width="200">
</div>
其中,<input>
标签用于上传图片,accept="image/*"
表示只接受图片类型的文件,<img>
标签用于显示选中的图片,默认情况下显示一个占位符图片。
- jQuery代码
接下来,使用jQuery来实现上传前预览图片的功能。可以使用FileReader
对象来读取上传的图片文件,并将其显示在页面上。代码如下:
$(function() {
// 监听文件选择框的改变
$('#uploadImage').on('change', function() {
// 获取上传的文件
var file = this.files[0];
// 创建 FileReader 对象
var reader = new FileReader();
// 文件读取完成后执行的回调函数
reader.onload = function(e) {
// 将读取到的图片数据赋值给 img 元素显示出来
$('#preview').attr('src', e.target.result);
};
// 读取文件
reader.readAsDataURL(file);
});
});
首先,使用$('#uploadImage').on('change', function() {})
来监听文件选择框的改变事件。当文件选择框发生变化时,执行回调函数内的代码。
在回调函数内部,首先获取上传的文件,即this.files[0]
。然后创建一个FileReader
对象,它可以读取文件内容,并将文件内容以URL的形式保存在result
属性中。
接着,指定reader.onload
回调函数,即文件读取完成后执行的操作。在回调函数内部,将读取到的图片数据赋值给<img>
元素的src
属性,从而实现预览图片的效果。需要注意的是,在<img>
元素中设置了一个width
属性,代表上传的图片在页面上显示的宽度,可以根据需求进行调整。
- 示例说明
下面给出两个示例,分别演示了如何在不同情境下使用jQuery在上传前预览图片。
3.1 示例一:单图上传页面
假设我们现在有一个单图上传页面,用户需要选择一个图片文件并上传。这时,我们可以在上传前预览图片,让用户确认选择的图片是否正确。示例代码如下:
<!DOCTYPE html>
<html>
<head>
<title>单图上传页面</title>
<meta charset="utf-8">
<script src="https://cdn.bootcdn.net/ajax/libs/jquery/3.6.0/jquery.min.js"></script>
</head>
<body>
<div>
<input type="file" id="uploadImage" accept="image/*">
<br>
<img id="preview" src="placeholder.png" alt="image preview" width="200">
</div>
<script>
$(function() {
// 监听文件选择框的改变
$('#uploadImage').on('change', function() {
// 获取上传的文件
var file = this.files[0];
// 创建 FileReader 对象
var reader = new FileReader();
// 文件读取完成后执行的回调函数
reader.onload = function(e) {
// 将读取到的图片数据赋值给 img 元素显示出来
$('#preview').attr('src', e.target.result);
};
// 读取文件
reader.readAsDataURL(file);
});
});
</script>
</body>
</html>
用户在选择图片文件后,页面会自动显示该图片的缩略图。如果用户确认选择的图片正确,点击上传按钮即可将图片上传至服务器。
3.2 示例二:多图上传页面
假设我们现在有一个多图上传页面,用户可以选择多个图片文件并上传。这时,我们可以在上传前预览所有选择的图片,让用户确认选择的图片是否正确。示例代码如下:
<!DOCTYPE html>
<html>
<head>
<title>多图上传页面</title>
<meta charset="utf-8">
<script src="https://cdn.bootcdn.net/ajax/libs/jquery/3.6.0/jquery.min.js"></script>
</head>
<body>
<div>
<input type="file" id="uploadImages" accept="image/*" multiple>
<br>
<div id="previewContainer"></div>
</div>
<script>
$(function() {
// 监听文件选择框的改变
$('#uploadImages').on('change', function() {
// 获取上传的文件列表
var files = this.files;
// 将文件列表转换为数组
var filesArray = Array.from(files);
// 创建 FileReader 对象
var reader = new FileReader();
// 处理文件列表中的每个文件
filesArray.forEach(function(file) {
// 读取文件
reader.readAsDataURL(file);
// 文件读取完成后执行的回调函数
reader.onload = function(e) {
// 创建 img 元素并显示图片
var img = $('<img>').attr('src', e.target.result).attr('width', '200');
$('#previewContainer').append(img);
};
});
});
});
</script>
</body>
</html>
用户在选择图片文件后,页面会自动显示所有选择的图片的缩略图。用户可以拖拽缩略图的位置,对多个图片的位置进行排版和调整。如果用户确认选择的图片正确,点击上传按钮即可将所有图片上传至服务器。