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

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、不可编辑状态

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

做一个类似东郊到家的上门服务类系统有哪些功能?

上门服务系统是一款便捷的技师接单、上门提供理疗服务的软件。我们拥有优秀的开发团队&#xff0c;为您量身定制解决方案&#xff0c;价格合理&#xff0c;用心服务。 预约上门&#xff1a;该功能是预约上门推拿理疗按摩系统软件小程序APP的核心功能。消费者通过系统预约下单&a…

python打包exe,打包好后,启动exe报错找不到paddleocr

目录 1、安装pyinstaller 2、生成脚本文件的.spce文件 3、资源文件配置 4、生成exe文件 5、使用了paddleocr启动exe后报错 6、配置.spce文件 7、重新生成exe文件 8、关于图片找不到的问题 参考&#xff1a;PaddleOCR打包exe--Pyinstaller_paddleocr 打包exe_mjiansun的博…

签名应用APP分发平台的微服务化部署是什么?其有哪些优势?

在信息技术的世界里&#xff0c;软件开发和部署的模式不断演进。从单体架构到服务化&#xff0c;再到今日备受瞩目的微服务架构。微服务化部署作为一种新兴的软件架构风格&#xff0c;正被越来越多的企业采用。它使得应用可以被分解成一套相互独立的最小服务单元。而“分发平台…

Web安全-初识SQL注入(一)

1、初识SQL注入 1.1、什么是注入&#xff1f; 将不受信任的数据作为命令或查询的一部分发送到解析器时&#xff0c;会产生诸如SQL注入、NoSQL注入、OS 注入和LDAP注入的注入缺陷。攻击者的恶意数据可以诱使解析器在没有适当授权的情况下执行非预期命令或访问数据。 注入能导…

基于 springboot + vue 健身房管理系统 毕业设计-附源码

qq&#xff08;2829419543&#xff09;获取源码 开发语言&#xff1a;Java Java开发工具&#xff1a;JDK1.8 后端框架&#xff1a;springboot 前端&#xff1a;采用vue技术开发 数据库&#xff1a;MySQL5.7和Navicat管理工具结合 服务器&#xff1a;Tomcat8.5 开发软件&#xf…

Temu数据软件:如何使用Temu数据软件优化您的Temu店铺运营

在如今竞争激烈的电商市场中&#xff0c;了解市场趋势、优化产品和店铺运营、了解竞争对手等方面的数据分析变得至关重要。为了帮助Temu平台上的商家更好地了解市场和消费者需求&#xff0c;提高运营效果&#xff0c;Temu数据软件成为了一项强大的工具。本文将介绍一些建议的Te…

【Tomcat】java.net.BindException “Address already in use: NET_Bind“

问题 17:37 Error running Tomcat 7.0.76: Unable to open debugger port (127.0.0.1:14255): java.net.BindException "Address already in use: NET_Bind"调整 把14255 改成 49963就正常了 附件 netstat -aon|findstr "49963" taskkill -f -pid xxx…

WiFi模块ESP8266(超详细)---(含固件库、AP、STA、原子云使用)

写在前面&#xff1a;本节我们学习使用一个常见的模块--WIFI模块&#xff0c;在前面我们学习了蓝牙&#xff08;HC--08&#xff09;模块&#xff0c;为学习WIFI模块打下了一定的基础&#xff1b;但是在学习WIFI模块的时候&#xff0c;我也遇到了很多的问题&#xff0c;查阅了很…

常见的分布式事务解决方案,你会几种?

今天我们来聊一聊分布式事务&#xff0c;在传统的单体应用中&#xff0c;事务的控制非常简单&#xff0c;Spring框架都为我们做了封装&#xff0c;我们只需简单地使用Transactional注解就能进行事务的控制&#xff0c;然而在分布式应用中&#xff0c;传统的事务方案就出现了极大…

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

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

ROS2教程02 ROS2的安装、配置和测试

ROS2的安装和配置 版权信息 Copyright 2023 Herman YeAuromix. All rights reserved.This course and all of its associated content, including but not limited to text, images, videos, and any other materials, are protected by copyright law. The author holds a…

python超详细基础文件操作【建议收藏】

文章目录 前言1 文件操作1.1 文件打开与关闭1.1.1 打开文件1.1.2 关闭文件 1.2 访问模式及说明 2 文件读写2.1 写数据&#xff08;write&#xff09;2.2 读数据&#xff08;read&#xff09;2.3 读数据&#xff08;readlines&#xff09;2.3 读数据&#xff08;readline&#x…

机器学习-ROC曲线:技术解析与实战应用

本文全面探讨了ROC曲线&#xff08;Receiver Operating Characteristic Curve&#xff09;的重要性和应用&#xff0c;从其历史背景、数学基础到Python实现以及关键评价指标。文章旨在提供一个深刻而全面的视角&#xff0c;以帮助您更好地理解和应用ROC曲线在模型评估中的作用。…

CSS中 设置文字下划线 的几种方法

在网页设计和开发中&#xff0c;我们经常需要对文字进行样式设置&#xff0c;包括字体,颜色&#xff0c;大小等&#xff0c;其中&#xff0c;设置文字下划线是一种常见需求 一 、CSS种使用 text-decoration 属性来设置文字的装饰效果&#xff0c;包括下划线。 常用的取值&…

蓝桥杯算法心得——仙界诅咒(dfs)

大家好&#xff0c;我是晴天学长&#xff0c;搜索型的dfs&#xff0c;差点开二维矩阵了&#xff0c;仔细一想&#xff0c;没那么夸张啊&#xff0c;哈哈哈&#xff0c;需要的小伙伴可以关注支持一下哦&#xff01;后续会继续更新的。&#x1f4aa;&#x1f4aa;&#x1f4aa; 1…

计算机视觉之手势、面部、姿势捕捉以Python Mediapipe为工具

计算机视觉之手势、面部、姿势捕捉以 Python Mediapipe为工具 文章目录 1.Mediapipe库概述2.手势捕捉(hands)3.面部捕捉(face)4.姿势捕捉(pose) 1.Mediapipe库概述 Mediapipe是一个开源且强大的Python库&#xff0c;由Google开发和维护。它提供了丰富的工具和功能&#xff0c…

java--接口概述

1.认识接口 ①java提供了一个关键字interface&#xff0c;用这个关键字我们可以定义出一个特殊的结构&#xff1a;接口。 ②注意&#xff1a;接口不能创建对象&#xff1b;接口是用来被类实现(implements)的&#xff0c;实现接口的类称为实现类。 ③一个类可以实现多个接口(接…

ROS2教程05 ROS2服务

ROS2服务 版权信息 Copyright 2023 Herman YeAuromix. All rights reserved.This course and all of its associated content, including but not limited to text, images, videos, and any other materials, are protected by copyright law. The author holds all right…

热点新闻 | 许战海:零食行业的革新之道

2023年11月29日&#xff0c;华糖万商大会在南京国际会展中心隆重举行。著名战略定位咨询专家许战海受邀出席&#xff0c;在“量贩零食产业年度盛典”上发表了主题为《如何通过竞争战略布局年度规划》的精彩演讲&#xff0c;吸引了众多业界关注。 演讲中&#xff0c;许战海老师指…

23史上最全版---SQL注入详解

漏洞原因 一些概念&#xff1a; SQL&#xff1a;用于数据库中的标准数据查询语言。 web分为前端和后端&#xff0c;前端负责进行展示&#xff0c;后端负责处理来自前端的请求并提供前端展示的资源。 而数据库就是存储资源的地方。 而服务器获取数据的方法就是使用SQL语句进…