javascript - Javascript - 向图像预览添加删除选项
问题描述
我正在尝试使用预览图像的删除按钮进行多图像上传预览。那些被删除的图像不应该提交给服务器。这里和 Internet 上的大多数解决方案都使用 jquery,我想避免这种情况。在这里有一个普通的 javascript 解决方案会很好。所以,我的问题是:
如何向预览图像添加删除选项(链接)?
const input = document.querySelector('input');
const preview = document.querySelector('.preview');
input.style.opacity = 0;
input.addEventListener('change', updateImageDisplay);
function updateImageDisplay() {
while(preview.firstChild) {
preview.removeChild(preview.firstChild);
}
const curFiles = input.files;
if(curFiles.length === 0) {
const para = document.createElement('p');
para.textContent = 'No files currently selected for upload';
preview.appendChild(para);
} else {
const list = document.createElement('ol');
preview.appendChild(list);
for(const file of curFiles) {
const listItem = document.createElement('li');
const para = document.createElement('p');
if(validFileType(file)) {
para.textContent = `File name ${file.name}, file size ${returnFileSize(file.size)}.`;
const image = document.createElement('img');
image.src = URL.createObjectURL(file);
listItem.appendChild(image);
listItem.appendChild(para);
} else {
para.textContent = `File name ${file.name}: Not a valid file type. Update your selection.`;
listItem.appendChild(para);
}
list.appendChild(listItem);
}
}
}
const fileTypes = [
'image/apng',
'image/bmp',
'image/gif',
'image/jpeg',
'image/pjpeg',
'image/png',
'image/svg+xml',
'image/tiff',
'image/webp',
`image/x-icon`
];
function validFileType(file) {
return fileTypes.includes(file.type);
}
function returnFileSize(number) {
if(number < 1024) {
return number + 'bytes';
} else if(number > 1024 && number < 1048576) {
return (number/1024).toFixed(1) + 'KB';
} else if(number > 1048576) {
return (number/1048576).toFixed(1) + 'MB';
}
}
form {
width: 600px;
background: #ccc;
margin: 0 auto;
padding: 20px;
border: 1px solid black;
}
form ol {
padding-left: 0;
}
form li, div > p {
background: #eee;
display: flex;
justify-content: space-between;
margin-bottom: 10px;
list-style-type: none;
border: 1px solid black;
}
form img {
height: 64px;
order: 1;
}
form p {
line-height: 32px;
padding-left: 10px;
}
form label, form button {
background-color: #7F9CCB;
padding: 5px 10px;
border-radius: 5px;
border: 1px ridge black;
font-size: 0.8rem;
height: auto;
}
form label:hover, form button:hover {
background-color: #2D5BA3;
color: white;
}
form label:active, form button:active {
background-color: #0D3F8F;
color: white;
}
<form>
<div>
<label for="image_uploads">Choose images to upload (PNG, JPG)</label>
<input type="file" id="image_uploads" name="image_uploads" accept=".jpg, .jpeg, .png" multiple>
</div>
<div class="preview">
<p>No files currently selected for upload</p>
</div>
<div>
<button>Submit</button>
</div>
</form>
解决方案
推荐阅读
- java - 无法在 hapi 版本 5.x 上针对自定义配置文件的选择错误找到匹配的配置文件
- django - 图像的 DRF 更新方法
- vue.js - 如何使用 Nuxt/Vue 在页面重新加载时更新组件状态?
- cookies - WIX 在重新加载时自动重置 cookie
- arrays - 为什么 sscanf 只读取两行带有指针的指针?
- javascript - 如何更改 JavaScript 中的基本 URL?
- javascript - 使用 Jest 单元测试模拟代码中的条件
- apache-flink - HttpAsyncClient HC5 请求超时
- python - 如何使用 python 请求模块创建自定义标头
- arangodb - 如何在访客机器上访问 ArangoDB Web 界面