当前位置: 首页 > news >正文

25-vue-photo-preview的使用及使用过程中的问题解决方案

前提条件:在整理预览工具的过程中遇到vue-photo-preview这个插件库,是用于预览图片的,好像没有用过,所以就花了点时间玩了一下

这里简单记录一下使用方法以及在过程中遇到的一些问题

1. 安装(安装后的版本是1.1.3)

npm install vue-photo-preview --save

2. 使用

全局注册插件

import PhotoPreview from 'vue-photo-preview';
import 'vue-photo-preview/dist/skin.css';Vue.use(PhotoPreview, {fullscreenEl: false, // 关闭全屏按钮zoomEl: false,       // 关闭缩放按钮bgOpacity: 0.85,    // 背景透明度
});

更多option配置项,见:Options | PhotoSwipe

在组件中使用

<template><div><!-- 同组图片使用相同值preview,想要不同组展示的可以通过区分preview的值实现 --><imgv-for="(item, index) in images":key="index":src="item.src":large="item.large"preview="0"preview-text="图片描述"style="width: 100px; cursor: pointer;"/></div>
</template>
​
<script>
export default {data() {return {images: [{ src: '/thumb1.jpg', large: '/large1.jpg' },{ src: '/thumb2.jpg', large: '/large2.jpg' },],};},
};
</script>

3. 遇到的问题

①代码提示没有找到vue-photo-preview的声明文件

正常插件安装之后会有一个types目录,下面有.d.ts的声明文件,但是vue-photo-preview这个包没有,所以提示了这个错误(但是不影响插件的使用)

且根据提示使用npm i --save-dev @types/vue-photo-preview报错,那就换另一种方法,添加一个包含 declare module 'vue-photo-preview'; 的新声明(.d.ts)文件

在src目录下创建(文件名自定义)

declare module "vue-photo-preview" {import { Plugin } from "vue";const install: Plugin;export default install;
}

 ②使用v-if后点击无效

<div v-if="previewType === 'vue-photo-preview'"><imgv-for="(item, index) in imgList":key="'vue-photo-preview' + index":src="item.src":large="item.src"preview="0"preview-text="图片描述"style="width: 100px; cursor: pointer"/>
</div>

检查发现,有效的img在F12中的元素是这样的

而无效的img是这样的

缺少了data-pswp-uid的标识属性

data-pswp-uid 的作用

  • 唯一标识data-pswp-uid 是 PhotoSwipe 自动为可预览图片生成的唯一标识,用于在预览时定位对应的图片。

  • 内部机制:当点击图片时,vue-photo-preview 会通过这个属性找到图片在预览组中的位置(如缩略图和大图的对应关系)。

是因为使用了v-if后,图片可能在插件初始化后才渲染到 DOM,所以图片没有和预览进行绑定,可以使用以下方式解决

方法一:强制重新扫描图片

//$previewRefresh()在注册插件时会自动挂载到Vue上
this.$nextTick(() => {this.$previewRefresh();//强制重新扫描图片//网上说可以用//this.$preview.refresh()//或者//this.$preview.open()//没有的事,$preview虽然有挂载,但是没有这两个方法(很坑),如果不知道有没有这个方法的,可以直接打印this.$preview,或者在包文件里面找
});

这是打印this.$preview

这是搜索包文件的

方法二:用v-show替代v-if

最后结果如图

用完这个图片预览工具我还是觉得viewer更好用一点,看个人喜好吧,仅作学习了解

学习如逆水行舟,不进则退~

http://www.lryc.cn/news/605925.html

相关文章:

  • Hive课后练习题
  • 【Leetcode】2683. 相邻值的按位异或
  • 《Java 程序设计》第 16 章 - JDBC 数据库编程
  • rabbitmq的安装和使用-windows版本
  • MFC CChartCtrl编程
  • Python爬虫07_Requests爬取图片
  • 【Java23种设计模式】:模板方法模式
  • 【C语言】深度剖析指针(三):回调机制、通用排序与数组指针逻辑
  • PostgreSQL面试题及详细答案120道(01-20)
  • 前端方案设计:实现接口缓存
  • 什么是网络安全?网络安全包括哪几个方面?学完能做一名黑客吗?
  • 网络与信息安全有哪些岗位:(4)应急响应工程师
  • Amazon RDS for MySQL成本优化:RDS缓存降本实战
  • 前缀和-1314.矩阵区域和-力扣(LeetCode)
  • 隐私灯是否“可信”?基于驱动层的摄像头指示机制探析
  • 【1】数据可视化分析方法
  • 20250731在荣品的PRO-RK3566开发板的Android13下跑通敦泰的FT8206触控芯片
  • Google政策大更新:影响金融,Ai应用,社交,新闻等所有类别App
  • 新手教程:用外部 PostgreSQL 和 Zookeeper 启动 Dolphinscheduler
  • 25.(vue3.x+vite)两个pinia如何互相调用
  • Docker 初学者需要了解的几个知识点 (七):php.ini
  • LoggerFactory(日志门面框架核心工厂类)详解
  • 【C#设计模式】深入理解常见迭代器模式(Iterator Pattern)
  • 安装 docker compose v2版 笔记250731
  • docker离线安装mysql镜像
  • 内存网格、KV存储和Redis的概念、使用场景及异同
  • 分布式锁ZK与redis
  • Redis 存在哪些问题
  • 【问题】Docker 容器内的应用(如n8n),访问不到外部主机的应用(如mysql)
  • 【单片机】【分布式】从单机到分布式:Redis如何成为架构升级的关键力量