Vue项目图片预览v-viewer插件使用,图片预览,图片查看;antdesign+vue2+v-viewer实现图片查看器并可删除图片

news2025/2/22 8:44:13

Vue项目图片预览v-viewer插件使用

1. 安装 v-viewer

你可以使用 npm 或者 yarn 来安装 v-viewer:

npm install v-viewer
或者
yarn add v-viewer

2. 导入和配置 v-viewer

在你的 Vue 项目中,你需要在入口文件(通常是 main.js)中导入 v-viewer 并进行全局配置:

 

// 在main.js中引入,记得引用它的CSS样式
import Viewer from 'v-viewer'
import 'viewerjs/dist/viewer.css'

//  进行Vue注册调用
Vue.use(Viewer)

3. 使用 v-viewer封装成组件 imageViewer.vue

<template>
<!--图片查看器 图片小图展示后点击图片即可查看大图-->
  <div class="viewer-wrapper">
    <viewer ref="viewer" :images="images" class="viewer">
      <span v-for="(src,index) in images" :key="src.url" class="image-box" style="display: inline-block">
        <img  :src="src.url"  class="images" ref="image"/>
        <span class="opt-shade" v-if="shadeFlag"></span>
        <span  class="opt-shade-btn"  v-if="shadeFlag">
          <a-icon type="eye" class="preview-image" @click="previewImg(index)"/>
          <a-icon v-if="deleteBtnVisible" type="delete" class="del-image" @click="removeImage(src, index)"/></span>
        </span>
    </viewer>
  </div>
</template>

<script>
import 'viewerjs/dist/viewer.css'

export default {
  name: 'imageViewer',
  props: {
    // 是否显示鼠标 hover 遮罩
    shadeFlag: {
      type: Boolean,
      default: true
    },
    // 图片list
    images: {
      type: Array,
      default: () => {
        return []
      }
    },
    // 图片尺寸
    size: {
      type: Object,
      default: () => {
        return {width: 120 + 'px', height: 120 + 'px'}
      }
    },
    // 是否展示删除按钮
    deleteBtnVisible: {
      type: Boolean,
      default: true
    }
  },
  data () {
    return {
      originalViewList: [] // 原始图片列表
    }
  },
  mounted () {
  },
  methods: {
    // 预览
    previewImg (index) {
      this.$refs.image[index].click() // 触发原插件 img 的点击事件
    },
    removeImage (img, index) {
      console.info('删除')
      this.$emit('removeImage', img, index)
    }
  }
}
</script>

<style scoped>
.viewer {
  display: flex;
  flex-wrap: wrap;
}
.image-box {
  position: relative;
  cursor: pointer;
  margin-bottom: 8px;
}
.opt-shade {
  width: 100%;
  height: 100%;
  background: black;
  display: none;
  position: absolute;
  top: 0;
  left: 0;
}
.image-box {
  width: 104px;
  height: 104px;
  padding: 10px;
  margin-right: 10px;
  border: 1px solid #d9d9d9;
}
.image-box:hover .opt-shade {
  opacity: 0.3;
  background-color: black;
  display: block;
}
.image-box:hover .opt-shade-btn {
  width: 100%;
  height: 100%;
  display: flex;
  justify-content: center;
  align-items: center;
}
.opt-shade-btn {
  z-index: 100;
  position: absolute;
  top: 0;
  left: 0;
  display: none;
}
.preview-image, .del-image {
  display: inline-block;
  margin: 10px;
  color: #fff;
}
.images {
  width: 100%;
  height: 100%;
}
</style>

4、父组件使用 parent.vue

 

<template>
    <div>
        <a-upload
            v-show="packageInfo.images.length<10&&canEdit"
            name="avatar"
            list-type="picture-card"
            class="avatar-uploader"
            :show-upload-list="false"
          >
            <div>
              <a-icon type="plus"/>
              <div class="ant-upload-text">
                Upload
              </div>
            </div>
          </a-upload>
<!-- 注意传递到图片预览组件的数据格式要符合组件接收的格式。也可自行优化 --->
            <ImageViewer :images="viewerImgs" 
                @removeImage="removeImage" 
                :deleteBtnVisible="canEdit">
            </ImageViewer>
    </div>
        
</template>

<script>
import ImageViewer from '@/components/imageViewer.vue'
data(){
    return {
        viewerImgs: [], // 传递给图片查看器的image数据
    }
},
  components: {
    ImageViewer
  },
methods: {
        // 删除文件
    // 移出image
    removeImage (img, index) {
      this.viewerImgs.splice(index, 1)
    },
}
</script>

效果图

1、可编辑状态,点击小眼睛可预览,点击垃圾桶可删除

2、不可编辑状态

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

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

相关文章

通信标准化协会,信通院及量子信息网络产业联盟调研玻色量子,共绘实用化量子未来!

8月14日&#xff0c;中国通信标准化协会&#xff0c;信通院标准所及量子信息网络产业联盟等单位领导走访调研北京玻色量子科技有限公司&#xff08;以下简称“玻色量子”&#xff09;&#xff0c;参观了玻色量子公司及自建的十万颗粒洁净度的光量子信息技术实验室&#x1f517;…

自己开发组件更新到npm网站上 通过npm install 安装 保姆级别教程

文章目的 在项目开发中&#xff0c;经常通过npm install安装使用各种各样的npn包。本文记录如何自己实现的一个npm包 1. 环境准备 开发环境安装好,没有准备好环境 需要先安装哦 2. 创建Vue项目 初始化Vue项目&#xff1a;vue create xwdm-test 选择手动选择功能 Manually selec…

mac shortcut keys cheat sheet【mac 快捷键清单】

文章目录 剪切、拷贝、粘贴和其他常用快捷键访达和系统快捷键 Mac 键盘快捷键 Command&#xff08;或 Cmd&#xff09;⌘ Shift ⇧ Option&#xff08;或 Alt&#xff09;⌥ Control&#xff08;或 Ctrl&#xff09;⌃ Caps Lock ⇪ Fn 剪切、拷贝、粘贴和其他常用快捷…

分享106个图片JS特效,总有一款适合您

分享106个图片JS特效&#xff0c;总有一款适合您 106个图片JS特效下载链接&#xff1a;百度网盘 请输入提取码 提取码&#xff1a;6666 Python采集代码下载链接&#xff1a;采集代码.zip - 蓝奏云 学习知识费力气&#xff0c;收集整理更不易。知识付费甚欢喜&#xff0c…

4、类和对象、this指针、常对象和常函数

类和对象 类的一般形式 访问控制限定符 public 公有成员&#xff0c;谁都可以访问protected 保护成员&#xff0c;只有类自己和子类可以访问private 私有成员&#xff0c;只有类自己可以访问 类和结构的访问控制限定符区别 类的缺省访问控制限定为私有(private)结构的缺省访…

C++空类的那点事儿

什么是C的空类 顾名思义&#xff0c;空类就是指哪些不包含成员变量的类。例如以下这个就是一个空类&#xff1a; class EmptyBase {}; 既然如此&#xff0c;那么是不是说空类的内部一定不会其他代码呢&#xff1f;不是的&#xff0c;空类内部也可以包含其他东西&#xff0c;…

数字化车间|用可视化技术提升车间工作效率

数字化车间正在成为现代制造业的重要组成部分。随着科技的不断进步&#xff0c;传统的车间生产方式逐渐地被数字化和自动化取代。数字化车间将机器和软件进行整合&#xff0c;实现了生产过程的高效、精确和可追溯。在数字化车间中&#xff0c;机器之间可以进行无缝的通信和协作…

【云备份】客户端实现 及 项目整体总结

文章目录 客户端客户端实现思想客户端文件操作类的设计与拷贝Util.hpp的设计data.hpp的设计Storage —— 持久化存储Initload——数据初始化加载 cloud.hpp的设计GetFileIdentifier——创建文件唯一标识Upload—— 文件上传IsNeedupload —— 客户端文件是否需要上传判断RunMod…

正点原子linux应用编程——提高篇5

这篇笔记记一下网络应用编程以及CAN总线的应用编程。 网络基础知识 这个在学习lwIP的时候已经接触过了&#xff0c;这边再过一下&#xff0c;我自己觉得没什么意思的我就跳过了。 网络通信概述 网络通信本质上是一种进程间通信&#xff0c;是位于网络中不同主机上的进程之间…

麒麟linux将图片批量生成PDF的方法

笔者手里有一批国产linu系统&#xff0c;目前开始用在日常的工作生产环境中&#xff0c;我这个老程序猿勉为其难的充当运维的或网管的角色。 国产linux系统常见的为麒麟Linux&#xff0c;统信UOS等&#xff0c;基本都是基于debian再开发的linux。 问题描述&#xff1a; wind…

冬天来了,波司登的高端化“春天”不远了?

最近&#xff0c;羽绒服频繁“贵”上热搜。 在众多热搜词条中&#xff0c;一条“国产羽绒服卖到7000元”的话题一度将波司登推上了舆论的风口浪尖。 对此&#xff0c;波司登在最新的业绩说明会上进行了回应&#xff0c;公司表示&#xff1a;“波司登旗下主品牌及子品牌将形成差…

律所信息化建设成为趋势,Alpha系统助力律所数字化升级

近些年来&#xff0c;越来越多的律所借助数字化技术进行信息化建设&#xff0c;围绕“智慧律所”建设做了大量的努力。为尽快完成这一目标&#xff0c;经过深入研判&#xff0c;多数律所决定引进“Alpha法律智能操作系统”。该系统以其强大功能为律所智慧化建设注入催化剂。 据…

2023年AI工具排行榜:最全工具汇总!

如今&#xff0c;人工智能技术正在快速崛起,AI助手、语音识别、机器翻译等工具深深渗透到我们的工作和生活中。这些智能工具极大地提高了我们的工作效率,使我们能更加专注于创造性的任务。 本文将为读者推荐一些实用的AI神器,只要掌握其中一个,就能极大地提升你的工作能力,事半…

使用Python的PyQt实现财务综合计算

背景&#xff1a; 考核内容 使用 Python 编写程序代码&#xff0c;设计一个带交互界面的财务分析软件&#xff0c;并满足以下要求: PART1:《财务软件设计思路报告》 (30分) (1)编写《财务软件设计思路报告》&#xff0c;描述你编制这个财务软件的设计目标、应用场景、设计思路…

Mysql进阶-事务锁

前置知识-事务 事务简介 事务 是一组操作的集合&#xff0c;它是一个不可分割的工作单位&#xff0c;事务会把所有的操作作为一个整体一起向系统提交或撤销操作请求&#xff0c;即这些操作要么同时成功&#xff0c;要么同时失败。 就比如: 张三给李四转账1000块钱&#xff0…

基于AT89C51单片机四位加法计算器的设计

1&#xff0e;设计任务 利用AT89C51单片机为核心控制元件,设计一个四位加法计算器&#xff0c;设计的系统实用性强、操作简单&#xff0c;实现了智能化、数字化。 1&#xff09;、通过4*4矩阵键盘输入数字及运算符&#xff1b; 2&#xff09;、可以进行4位十进制数以内的加法…

线程池(Linux +C)

参考 手写线程池 - C语言版 | 爱编程的大丙 (subingwen.cn) 目录 1.为什么需要线程池&#xff1f; 1&#xff09;线程问题&#xff1a; 2&#xff09;如何解决线程问题&#xff08;线程池的优势&#xff09;&#xff1a; 2.线程池是什么&#xff1f; 1&#xff09;线程的…

某夕夕商家告诉你:这样寄快递居然这么省钱(便宜寄全国)

在当下很多时候寄快递成为了困扰很多人的问题&#xff0c;比如很多时候都会面临运费贵的问题&#xff0c;而且寄快递的效率也得不到保障&#xff0c;即使投诉快递员最终也是无济于事。其实在目前来看寄快递并没有这么难&#xff0c;闪侠惠递就能够有效的寄快递&#xff0c;而且…

试验数字化平台WDP 助力车企数据管理加速度

一 现状 随着现代测控技术的提高&#xff0c;数据结构变得越来越复杂多样&#xff0c;数据量也在日益增大。又因试验条件的限制&#xff0c;大多数企业的数据管理方式主要是通过各类电子文档将试验数据保存在每个工程师的移动电脑中&#xff0c;再进行汇总存储和共享。这种落后…

OpenHarmony 设备启动Logo和启动视频替换指南

前言 OpenHarmony源码版本&#xff1a;4.0release 开发板&#xff1a;DAYU / rk3568 一、Logo替换 替换其中的logo.bmp 和 logo_kernel.bmp文件 注意事项&#xff1a; 1、图片的分辨率需要和设备匹配 2、如果是非首次编译&#xff08;存在缓存&#xff09;需要将out目录删…