vue.js - 如何以模态显示图像预览?
问题描述
我的组件是这样的:
<input type="file"
ref="file"
@change="onFileChange"
class="d-none"
:accept="accept">
<button type="button" @click="selectFile">
我的方法是这样的:
methods: {
selectFile(){
this.$refs.file.click()
},
onFileChange(e) {
let files = e.target.files || e.dataTransfer.files;
if (!files.length) {
return
}
this.fileName = files[0].name
this.createImage(files[0])
},
createImage(file) {
var image = new Image()
var reader = new FileReader()
reader.onload = (e) => {
this.file = e.target.result;
this.$emit('change', this.file)
}
reader.readAsDataURL(file)
}
}
我的完整代码和演示如下:https ://codepen.io/positivethinking639/pen/JjGNGgg
当用户单击上传图像按钮时,它会显示文件名。我想如果我点击文件名,它将以模态的形式显示预览图像
我该怎么做?
解决方案
您可以将问题分解为更小的问题来解决:
- 创建一个模态并将 css 样式对象绑定到它。您可以将 css 样式绑定到此 div
<div id="image-preview" :style="previewStyle"></div>
用于显示响应式图像的样式对象可以是:
previewStyle: {
width: '300px',
height: '300px',
display: 'none',
backgroundSize: 'cover',
backgroundImage: ''
}
然后,您稍后在上传文件时使用适当的 url 更新 backgroundImage。
- 触发模式以显示/关闭图像按钮(绑定 :click 事件到
<p class="filename">{{ fileName }}</p>
激活模态(基本上更新了上面样式对象的'display'属性。3.模态必须显示所选图像的预览。这里最重要的部分是获取上传的blob对象的URL,你可以使用JS和目标文件上传输入:
const imgSrc = URL.createObjectURL(this.$refs.file.files[0]);
并使用 imgSrc 更新 backgroundImage url
这是一个如何完成的示例:
推荐阅读
- php - 在 Cockpit CMS 中保存集合、表单和单例时“找不到文件”
- python - 如何在 FLASK SQLAlchemy 中调用模型内部的属性
- bash - informix 12.10 在一个过程中,在循环中对条件进行多个查询
- javascript - 如何使用 HTML 呈现原始字符串
- plugins - 我该怎么做才能删除/卸载我的在线学习 Moodle 网站的插件?禁止消息
- python - 如何从 PyPortfolioOpt 导入“negative_cvar”?
- c++ - 如何减少这个程序的时间?
- python - 如何根据python中的条件添加geom_point图层
- php - PHP bcmath 扩展未安装在 Dockerfile 中
- postgresql - Symfony Distinct On date_trunc