vue中关于element的el-image 图片预览功能增加一个下载按钮

简介: vue中关于element的el-image 图片预览功能增加一个下载按钮

项目场景:

工作中我们常用会到 vue+element,其中预览组件难免会涉及到下载功能,或者其它扩展功能,但是el-image 支持的只是 简单放大旋转功能,解决方法 要么 修改组件,要么 通过 js动态渲染进去,接下来看操作。

效果图如下:

一、安装element-ui

1. 安装element-ui

在项目终端输入以下代码完成element-ui的安装

npm i element-ui -S

2. 检查是否安装成功

查看配置文件package.json,是否有element-ui组件的版本号

3. 引用element-ui组件

在main.js文件中输入以下代码,引入element

import ElementUI from 'element-ui'
import 'element-ui/lib/theme-chalk/index.css'
Vue.use(ElementUI)

二、改造步骤

修改代码:

通过点击放大时,添加点击事件,然后通过append 添加 按钮并且绑定事件,还是看下图吧,兄弟们,粘起来。

<template>
<div style="margin-top: 2vh">
         <waterfall
             @loadmore="loadmore"
             :col=4
             :lazy-distance="300"
             :load-distance="300"
             :data="xx">
           <div class="cell-item zxzx demo-image__preview "  v-for="(item,index) in xx" :key="index" @click="checkImage" style="padding: 0 1vw;">
             <el-image
                 style="width: 100%; margin-top: 2vh"
                 :src="item.img1"
                 :preview-src-list="[item.img]">
             </el-image>
             <p style="background-color: rgba(0,0,0,0.1); color: #fff; text-align: center;  margin-top: -6px;">{{item.createTime}}</p>
           </div>
         </waterfall>
       </div>
</template>
<script>
 mounted() {
window.cl = this.cl
},
methods: {
cl() {
      let srcUrl=document.querySelector('.el-image-viewer__img').src;
      this.downloadIamge(srcUrl,srcUrl)
    },
 checkImage(){//这个事件要绑定el-image父级盒子上
      console.log('点击事件');
      let a=document.querySelector('.el-image-viewer__actions__inner');
      // $(a).append(`<i class="el-icon-download" onclick="installImage()"></i>`)
      // a.append( `<i class="el-icon-download" onclick="cl()"></i>`)
      console.log(a)
      let ff = document.createElement('i')
      ff.innerHTML = `<i class="el-icon-download" onclick="cl()"></i>`
      a.appendChild(ff)
    },
    downloadIamge(imgsrc, name) {//下载图片地址和图片名
      let image = new Image();
      // 解决跨域 Canvas 污染问题
      image.setAttribute("crossOrigin", "anonymous");
      image.onload = function() {
        let canvas = document.createElement("canvas");
        canvas.width = image.width;
        canvas.height = image.height;
        let context = canvas.getContext("2d");
        context.drawImage(image, 0, 0, image.width, image.height);
        let url = canvas.toDataURL("image/png"); //得到图片的base64编码数据
        let a = document.createElement("a"); // 生成一个a元素
        let event = new MouseEvent("click"); // 创建一个单击事件
        a.download = name || "photo"; // 设置图片名称
        a.href = url; // 将生成的URL设置为a.href属性
        a.dispatchEvent(event); // 触发a的单击事件
      };
      image.src = imgsrc;
    },
}
</script>

最总效果


目录
相关文章
|
1月前
|
JavaScript API 开发者
Vue是如何进行组件化的
Vue是如何进行组件化的
|
7天前
|
JavaScript 关系型数据库 MySQL
基于VUE的校园二手交易平台系统设计与实现毕业设计论文模板
基于Vue的校园二手交易平台是一款专为校园用户设计的在线交易系统,提供简洁高效、安全可靠的二手商品买卖环境。平台利用Vue框架的响应式数据绑定和组件化特性,实现用户友好的界面,方便商品浏览、发布与管理。该系统采用Node.js、MySQL及B/S架构,确保稳定性和多功能模块设计,涵盖管理员和用户功能模块,促进物品循环使用,降低开销,提升环保意识,助力绿色校园文化建设。
|
1月前
|
JavaScript 前端开发 开发者
Vue是如何劫持响应式对象的
Vue是如何劫持响应式对象的
29 1
|
1月前
|
JavaScript 前端开发 开发者
Vue是如何进行组件化的
Vue是如何进行组件化的
|
1月前
|
存储 JavaScript 前端开发
介绍一下Vue的核心功能
介绍一下Vue的核心功能
|
1月前
|
JavaScript 前端开发 开发者
vue学习第一章
欢迎来到我的博客!我是瑞雨溪,一名热爱前端的大一学生,专注于JavaScript与Vue,正向全栈进发。博客分享Vue学习心得、命令式与声明式编程对比、列表展示及计数器案例等。关注我,持续更新中!🎉🎉🎉
41 1
vue学习第一章
|
1月前
|
JavaScript 前端开发 索引
vue学习第三章
欢迎来到瑞雨溪的博客,一名热爱JavaScript与Vue的大一学生。本文介绍了Vue中的v-bind指令,包括基本使用、动态绑定class及style等,希望能为你的前端学习之路提供帮助。持续关注,更多精彩内容即将呈现!🎉🎉🎉
30 1
|
1月前
|
缓存 JavaScript 前端开发
vue学习第四章
欢迎来到我的博客!我是瑞雨溪,一名热爱JavaScript与Vue的大一学生。本文介绍了Vue中计算属性的基本与复杂使用、setter/getter、与methods的对比及与侦听器的总结。如果你觉得有用,请关注我,将持续更新更多优质内容!🎉🎉🎉
38 1
vue学习第四章
|
1月前
|
JavaScript 前端开发 算法
vue学习第7章(循环)
欢迎来到瑞雨溪的博客,一名热爱JavaScript和Vue的大一学生。本文介绍了Vue中的v-for指令,包括遍历数组和对象、使用key以及数组的响应式方法等内容,并附有综合练习实例。关注我,将持续更新更多优质文章!🎉🎉🎉
25 1
vue学习第7章(循环)
|
1月前
|
JavaScript 前端开发
vue学习第九章(v-model)
欢迎来到我的博客,我是瑞雨溪,一名热爱JavaScript与Vue的大一学生,自学前端2年半,正向全栈进发。此篇介绍v-model在不同表单元素中的应用及修饰符的使用,希望能对你有所帮助。关注我,持续更新中!🎉🎉🎉
30 1
vue学习第九章(v-model)