使用el-upload上传图片,改造预览功能

本文介绍了如何在Element UI的el-upload组件中扩展图片预览功能,支持放大、缩小、旋转及切换图片,通过自定义组件和方法实现了更丰富的用户体验。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

今天给大家介绍一下在使用Elementel-upload上传图片的过程中,改造原有的预览功能。

官网预览效果图:

在这里插入图片描述

改造之后的预览效果:

在这里插入图片描述

区别如下

  • 官网的预览效果,只能单纯预览当前图片
  • 改造之后,可以对预览图片进行放大、缩小、旋转、下一张等操作

实现代码

<el-upload
    action="#"
    multiple
    list-type="picture-card"
    :class="{'is-not-allow-access':picIDListCount>=3}"
    :file-list="imageUrls"
    :on-remove="handleRemove"
    :on-preview="handlePictureCardPreview"
    :on-success="uploadSuccess"
  >
    <span> <i class="el-icon-plus" style="font-size:14px;" ></i> 添加图片</span>
  </el-upload>
  <!-- 大图预览 -->
  <el-image-viewer
      v-if="showImgViewer"
      :on-close="closeImgViewer"
      :url-list="imagePreviewUrls"
      :z-index="3000"
      :initial-index="initialImgPreviewIndex"
  />
import ElImageViewer from 'element-ui/packages/image/src/image-viewer'
  components: {
      ElImageViewer
  },
  data(){
    return {
      initialImgPreviewIndex:0, // 预览打开看到的图片下标
      imagePreviewUrls:[], // 预览图片的下标
    }
  },
  methods:{
    // 图片预览
    handlePictureCardPreview (file) {
      let index = this.imagePreviewUrls.indexOf(file.url)
      if (index >= 0) {
        this.initialImgPreviewIndex = index
      }
      this.showImgViewer = true
    },
    closeImgViewer () {
      this.showImgViewer = false
    },
    // 上传成功回调
    uploadSuccess (file, fileList) {
      if (fileList.status === 'success') {
        this.imagePreviewUrls.push(fileList.url) // 预览图片的数组
      }
    },
    // 删除选中的文件
    handleRemove (file) {
      // 删除预览数组对应的图片
      let index = this.imagePreviewUrls.indexOf(file.url)
      if (index > -1) {
        this.imagePreviewUrls.splice(index, 1)
      }
      // 执行删除
    },

  }

新选择了图片,要添加到预览图片数组中【见 uploadSuccess 方法】

在删除图片后,也要同步删除预览数组(imagePreviewUrls)中的该图 【见 handleRemove 方法】

在点击预览的时候,要传入预览组件要打开图片的下标【见 handlePictureCardPreview 方法】

以上代码为elementUI未暴露出来的组件,感兴趣的同学可以看下源码,在node_modules/element-ui/packages/image/src/image-viewer,还有许多可配置的参数

### 使用 `el-upload` 组件实现图片上传后的预览功能 为了实现在 Vue.js 中使用 Element UI 的 `el-upload` 组件来完成图片上传以及预览功能,可以按照如下方式构建 HTML 和 JavaScript 部分。 #### HTML 结构定义 在模板部分定义了一个用于触发文件选择对话框的按钮或图标,并通过条件渲染显示已选中的图片缩略图。当用户选择了新的图像时会调用指定的方法处理事件[^1]: ```html <template> <div> <!-- 文件上传控件 --> <el-upload action="/source/upload" accept=".jpg,.jpeg,.png,.gif,.JPG,.JPEG" :show-file-list="false" :on-change="handleLicensePreview" :before-upload="beforeLicenseUpload" :auto-upload="false"> <!-- 如果存在 img 属性,则展示该属性对应的图片;否则展示加号图标 --> <img v-if="form.img" :src="form.img" class="preach-img"/> <i v-else class="el-icon-plus avatar-uploader-icon"></i> </el-upload> </div> </template> ``` #### 方法逻辑编写 接下来,在脚本区域定义两个主要函数:一个是用来验证即将上传的文件是否满足特定的要求(比如大小限制),另一个是在文件发生变化时更新视图状态以便能够立即看到新选择的照片[^2]: ```javascript <script> export default { data() { return { form: { // 表单数据对象 img: '' // 存储当前选定图片 URL 字符串 } }; }, methods: { beforeLicenseUpload(file) { const isLt2M = file.size / 1024 / 1024 < 2; if (!isLt2M) { this.$message.error('上传头像图片大小不能超过 2MB!'); } return isLt2M; }, handleLicensePreview(file) { // 更新表单字段以反映最新选取的文件路径 this.form.img = URL.createObjectURL(file.raw); } } }; </script> ``` 上述代码片段展示了如何利用 `el-upload` 提供的相关钩子来进行简单的前端校验和即时反馈给用户的操作体验优化措施[^3]。
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值