el-image-pro点击文本也能预览图片,支持下载

news2024/9/19 19:47:49

背景

element-ui:2.15.14
el-image的预览是没有下载功能的,默认是这样的
且默认是通过点击图片才能预览的,有时候我们显示的是图片名称,那么能不能直接点击图片名称来预览呢?
在这里插入图片描述
现在想在预览的时候,给它加一个下载按钮,该怎么办,先上效果图
在这里插入图片描述

实现方法

思路:

  1. 封装组件,手动触发图片的点击事件
  2. 点击后进入预览弹框,在底部图标组中插入一个下载图标
  3. 隐藏组件,让父组件通过点击事件触发,就好像点击的时候弹出了预览弹框
    封装代码如下:
<template>
  <div class="img-parent-box" v-if="open" @click="checkImage" ref="parentRef">
    <el-image
      ref="imgRef"
      style="width: 100px; height: 100px"
      :src="src"
      :preview-src-list="[src]">
    </el-image>
  </div>
</template>

<script>
// 在el-image的基础上加了个下载按钮功能,适用于直接点击文本预览图片(注:不是直接点击图片)
export default {
  data() {
    return {
      open: false,
      src: null,
      fileName: null,
    }
  },
  methods: {
    // 显示弹框
    showDialog(e) {
      this.src = e.src
      this.fileName = e.fileName
      this.open = true
      this.$nextTick(() => {
        window.handleDownload = this.handleDownload
        this.$refs.imgRef.clickHandler()
        setTimeout(() => {
          this.$refs.parentRef.click()
        }, 100)
      })
    },

    // 图片预览加入下载按钮
    checkImage(){
      let a = document.querySelector('.el-image-viewer__actions__inner');
      let ff = document.createElement('i')
      ff.innerHTML = `<i class="el-icon-download" οnclick="handleDownload()"></i>`
      a.appendChild(ff)
    },

    // 下载
    handleDownload() {
      if (this.src) {
        this.downLoadImg(this.src, this.fileName || this.src);
      }
    },

    downLoadImg(file_url, name) {
      if (!file_url || !name) {
        console.warn('file_url和name不能为空!');
        return false
      }
      const a = document.createElement('a')
      const url = file_url;
      fetch(url,{mode:'cors'}).then(res => res.blob()).then(blob => {
        a.href = URL.createObjectURL(blob)
        a.download = name
        document.body.appendChild(a)
        a.click()
        window.URL.revokeObjectURL(a.href);
        document.body.removeChild(a);
      })
    }
  }
}
</script>

<style scoped>
.img-parent-box {
  width: 0;
  height: 0;
  overflow: hidden;
}
</style>

父组件中引用预览组件:

<img-preview ref="imgPreviewRef" />

父组件点击图片名称时直接调用即可:

  this.$refs.imgPreviewRef.showDialog({
  	src: res.data.url,
    fileName: res.data.fileName
 })

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2055049.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

探秘陆生生态秘境:eDNA视角下的多营养级物种世界

现今的生物多样性和气候危机迫使我们开发更有效的陆地生态系统监测工具&#xff0c;eDNA宏条形码技术&#xff08;eDNA metabarcoding&#xff09;&#xff0c;能够非侵入性地调查许多生态系统的物种丰富度&#xff0c;不会对生态环境造成干扰。通过分析这些信息&#xff0c;我…

树莓派开发笔记06-树莓派的SPI控制(点亮0.96OLED)

实验说明 我们这里会使用SPI去驱动一个0.96的OLED&#xff0c;首先需要打开SPI sudo raspi-config Interfacing Options------>SPI------>Yes------->OK------->finsh然后将屏幕接到树莓派上&#xff0c;接mosi和sclk的脚&#xff0c;DC接28&#xff0c;RST接29&…

C语言 ——— 学习并使用malloc和free函数

目录 malloc函数的功能 学习malloc函数​编辑 使用malloc函数 free函数的功能 学习并使用free函数​编辑 malloc动态开辟10个整型空间后赋值为0-9&#xff0c;再打印&#xff0c;打印后free malloc函数的功能 malloc函数能向内存申请一块连续可用的空间&#xff0c;并返…

模拟信号-放大器

放大器 放大器的输出信号是直流源和信号源经过放大器后&#xff0c;共同的作用&#xff0c;缺一不可。 直流参数 与放大器中电压源部分有关的参数&#xff0c;即放大器的直流参数。 采用直流电压源供电&#xff0c;电源电压是恒定的&#xff0c;但是电压源的输出电流是变化…

什么是OV SSL证书?如何申请

什么是OVSSL证书 OVSSL证书&#xff0c;全称是Organization Validation SSL Certificate&#xff0c;即组织验证型SSL证书。这是一种高级的SSL证书类型&#xff0c;用于保护网站和应用程序的安全性&#xff0c;特别是在电子商务和企业级网站中广泛应用。OVSSL证书不仅加密网站…

Linux:进程替换

什么是进程替换&#xff1f; 我们的可执行程序&#xff0c;在运行起来的时候就上一个进程 一个进程就会有他的内核数据结构代码和数据 把一个已经成型的进程的代码和数据替换掉&#xff0c;这就叫进程替换 也就是可以通过系统调用把当前进程替换位我们需要的进程 那么替换…

正点原子linux开发板 qt程序交叉编译执行

1.开发板光盘 A-基础资料->5、开发工具->1、交叉编译器->fsl-imx-x11-glibc-x86_64-meta-toolchain-qt5-cortexa7hf-neon-toolchain-4.1.15-2.1.0.sh 拷贝到 Ubuntu 虚拟机 用文件传输系统或者共享文件夹传输到linux虚拟机 用ls -l查看权限&#xff0c;如果是白色的使…

【银河麒麟高级服务器操作系统】实际案例分析,xfsaild占用过高

了解银河麒麟操作系统更多全新产品&#xff0c;请点击访问麒麟软件产品专区&#xff1a;https://product.kylinos.cn 服务器环境及配置 物理机/虚拟机 物理机 处理器&#xff1a; Intel(R) Xeon(R) Silver 4110 CPU 2.10GHz 内存&#xff1a; 65536 MiB (64 GiB) 主板…

HTML5简洁的通用网站模板源码

文章目录 1.设计来源1.1 主界面1.2 模板页面11.3 模板页面21.4 模板页面31.5 模板页面41.6 模板页面5 2.效果和源码2.1 动态效果2.2 源码目录2.3 源代码 源码下载 作者&#xff1a;xcLeigh 文章地址&#xff1a;https://blog.csdn.net/weixin_43151418/article/details/1413235…

【AD24报错】GND contains IO Pin and Power Pin objects 的解决方案

【AD24报错】GND contains IO Pin and Power Pin objects 的解决方案 在原理图设计过程中&#xff0c;在元器件接线引脚位置出现红色波浪线&#xff0c;显示错误GND contains IO Pin and Power Pin objects。 点击错误信息可以直接跳转到相关位置。 经查明&#xff0c;是在元…

【FPGA数字信号处理】- 数字信号处理如何入门?

​数字信号处理&#xff08;Digital Signal Processing&#xff0c;简称DSP&#xff09;是一种利用计算机或专用数字硬件对信号进行处理的技术&#xff0c;在通信、音频、视频、雷达等领域发挥着越来越重要的作用&#xff0c;也是FPGA主要应用领域之一。 本文将详细介绍数字信…

高德地图数据采集器|高德地图数据采集软件_一键导出表格

南斗地图数据采集是一款专业采集百度地图、360地图、高德地图、腾讯地图、必应、google、公司、店铺的手机、座机、地址、坐标等数据信息的软件&#xff0c;它与同类软件相比最显著特点是采集地图更专业、采集速度更快、采集更精准、操作方法更简单。 可以导出地图搜索结果数据…

运维学习————Linux环境下Tomcat的部署

目录 一、环境准备 二、 启动测试 三、访问端口修改 四、部署web项目 1、材料准备 2、部署 2.1、上传war包到webapps目录下 2.2、修改项目配置 2.3、浏览器访问 引申 一、环境准备 tomcat安装包&#xff1a;apache-tomcat-9.0.52 JDK环境&#xff1a; 我使用的y…

【TCP】连接管理:三次握手和四次挥手

连接管理 建立连接&#xff1a;三次握手断开连接&#xff1a;四次挥手 网络中的握手/挥手&#xff0c;就是发送不携带业务数据&#xff08;没有载荷&#xff0c;只有报头&#xff09;的数据包&#xff0c;但是能起到“打招呼”这样的效果。次数就是指网络通信的次数。 建立连…

【数学分析笔记】第2章第2节数列极限(3)

2. 数列极限 2.2 数列极限 2.2.5 数列极限的性质 保序性&#xff1a;【定理2.2.3】 { x n } , { y n } , lim ⁡ n → ∞ x n a , lim ⁡ n → ∞ y n b , a < b \{x_{n}\},\{y_{n}\},\lim\limits_{n\to\infty}x_{n}a,\lim\limits_{n\to\infty}y_{n}b,a<b {xn​},{yn…

Android强大的滚动控件RecyclerView

文章目录 Android强大的滚动控件RecyclerViewRecyclerView的基本用法RecyclerView实现横向滚动RecyclerView实现瀑布流布局RecyclerView**的点击事件 Android强大的滚动控件RecyclerView ListView由于其强大的功能&#xff0c;在过去的Android开发当中可以说是贡献卓越&#x…

C语言 | Leetcode C语言题解之第350题两个数组的交集II

题目&#xff1a; 题解&#xff1a; int cmp(const void* _a, const void* _b) {int *a _a, *b (int*)_b;return *a *b ? 0 : *a > *b ? 1 : -1; }int* intersect(int* nums1, int nums1Size, int* nums2, int nums2Size,int* returnSize) {qsort(nums1, nums1Size, s…

你还在手动刷公众号吗?‌试试 RSS 订阅,‌让信息自动汇聚

微信对于反爬的限制非常严格&#xff0c;之前有很多的方案&#xff0c;最后都是被封杀了。我这里列出一些我知道的、实践过的方案。 ‍ RSSHub 在路由“社交媒体”以及路由“新媒体”上都有很多方案&#xff0c;我基本都试过&#xff0c;但这些平台要么是收费的&#xff0c;…

图像数据处理17

四、形态学图像处理 4.3 开运算与闭运算 4.3.1开运算与闭运算的定义&#xff1a; 开运算&#xff1a;先腐蚀&#xff0c;再膨胀 闭运算&#xff1a;先膨胀&#xff0c;再腐蚀 记忆方法&#xff1a;膨胀&#xff08;胀开&#xff09;所以开运算最后对应的结果是膨胀&#x…

学习GitHub:注册与Linux环境对工作内容进行库分支上传

在这个数字化时代&#xff0c;GitHub已成为开发者们不可或缺的宝藏库。无论你是编程新手还是资深开发者&#xff0c;GitHub都能为你打开一扇通往无限创意与协作的大门。今天&#xff0c;就让我们一起踏上这段探索之旅&#xff0c;从GitHub的注册开始&#xff0c;再到如何在Linu…