javascript - 重叠图像预览
问题描述
我想在上传之前创建一个预览图像。当我选择新图像时,代码不会在添加之前删除旧图像。当我选择新图像时,我想删除旧图像。
$(document).ready(function() {
$(function() {
// Multiple images preview in browser
var imagesPreview = function(input, placeToInsertImagePreview) {
if (input.files) {
var filesAmount = input.files.length;
for (i = 0; i < filesAmount; i++) {
var reader = new FileReader();
reader.onload = function(event) {
$($.parseHTML('<img>')).attr('src', event.target.result).appendTo(placeToInsertImagePreview);
}
reader.readAsDataURL(input.files[i]);
}
}
};
$('#gallery-photo-add').on('change', function() {
imagesPreview(this, 'div.gallery');
});
});
});
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<input type="file" name="files[]" multiple id="gallery-photo-add" class="chooseFile">
<div class="gallery">
</div>
解决方案
不要使用异步文件读取器将图像读取为 base64,您只会浪费处理和内存。使用可以创建指向 blob/文件的引用的ObjectURLs
jQuery($ => {
let imagesPreview = function(input, placeToInsertImagePreview) {
$(placeToInsertImagePreview).empty()
Array.from(input.files).forEach(file => {
$('<img>', {
src: URL.createObjectURL(file)
}).appendTo(placeToInsertImagePreview)
})
}
$('#gallery-photo-add').on('change', function() {
imagesPreview(this, 'div.gallery')
})
})
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<input type="file" name="files[]" multiple id="gallery-photo-add" class="chooseFile">
<div class="gallery"></div>
推荐阅读
- linux-kernel - AOSP 内核调试
- python - 如何使用dict将字符分配给整数?
- cytoscape.js - Cytoscape.js,将标签文本放置在边缘顶部
- sql - 如何使用 JOIN 操作显示 Select 语句?
- python-3.x - 在 AWS Ubuntu EC2 实例中使用 Python 进行 IP 切换
- airflow - 如何通过环境变量添加气流池?
- angular - 将本地文件数据的内容导入另一个 Angular 组件
- r - 在 R 中创建不均匀序列
- r - 什么时候不应该使用 assignInNamespace?
- reactjs - 如何发送 event.target 以使用 FormData 模拟函数