用el-image-viewer实现全局预览图片

这篇具有很好参考价值的文章主要介绍了用el-image-viewer实现全局预览图片。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

背景

在后台管理系统中,一些预览图片的场景,通常都是使用 `el-image-viewer` 去实现,但是如果多个地方都需要预览图片,又要重复的去写 `el-image-viewer`  以及一些重复的和预览相关的代码。

可以把预览图片的组件放在根文件,把通用的预览相关的代码放在状态管理,哪里需要预览图片,就引入调用预览方法,让根组件的预览组件预览图片。

实现

1. 状态管理用的pinia,新建preview模块文件

// /stores/modules/preview.js

import { defineStore } from "pinia";

export const PreviewStore = defineStore({
	id: "PreviewStore",
	state: () => {
        return {
            // 记录图片预览数据
		   imageViewer: {	
			    show: false, // 控制图片的显现
			    url: "", // 预览的图片路径
			    close: () => {} // 关闭的回调方法
		    }
        }
    },
	actions: {
		// 打开图片预览的弹窗
		openImageViewer({ url, close }: { url: string; close?: Function }) {
			this.imageViewer = {
				show: true,
				url,
				close: async () => {
					close && (await close());
					this.imageViewer.show = false;
				}
			};
		}
	}
});

2.对 el-image-viewer 进行了二次封装,增加了点击遮罩层关闭预览方法

// /components/modules/CImageViewer/index.vue

<template>
	<el-image-viewer v-bind="$attrs" :url-list="[`${baseUrl}${imageViewerUrl}`]" @close="imageViewerClose" />
</template>
<script setup lang="ts">
import { onMounted, ref, nextTick, onBeforeUnmount, computed } from "vue";
import { windowOrigin } from "@/utils/util";
import { PreviewStore } from "@/stores/modules/preview";

const baseUrl = windowOrigin(); // 基础路径
const previewStore = PreviewStore();
const imageViewerUrl = computed(() => previewStore.imageViewer.url);
const imageViewerClose = computed(() => previewStore.imageViewer.close);
onMounted(() => {
	nextTick(() => {
		// 获取预览的遮罩层
		mask.value = document.querySelector(".el-image-viewer__mask") as HTMLDivElement;
		if (mask.value) {
			// 遮罩层增加点击事件,关闭预览
			mask.value.addEventListener("click", imageViewerClose.value);
		}
	});
});
onBeforeUnmount(() => {
	if (mask.value) {
		// 遮罩层增加点击事件,关闭预览
		previewStore.imageViewer.close();
		mask.value.removeEventListener("click", previewStore.imageViewer.close);
	}
});
</script>

3. 在根组件App.vue 使用 CImageViewer 预览图片组件

// App.vue

<template>
	... 其他文件
	<!-- 全局的图片预览组件 -->
	<c-image-viewer v-if="imageViewerVisible"></c-image-viewer>
</template>

<script setup lang="ts">
import { computed } from "vue";
import { PreviewStore } from "@/stores/modules/preview";

import CImageViewer from "@/components/modules/CImageViewer/index.vue";


const previewStore = PreviewStore();
// 控制图片预览组件显现的变量
const imageViewerVisible = computed(() => previewStore.imageViewer.show);

</script>

4. 调用预览图片组件

// 需要预览图片的文件

<template>
    <div class="page">
        <img
            class="imgUrl"
			v-for="(url, index) in imageList(',')"
			:key="index"
			:src="url"
			@click="handlePicturePreview(url)"/>
    </div>
</template>
<script setup lang="ts">
import { PreviewStore } from "@/stores/modules/preview";

// ===========【 查看图片 】===========
const previewStore = PreviewStore();
const handlePicturePreview = (url: string) => {
	previewStore.openImageViewer({ url });
};
</script>

用el-image-viewer实现全局预览图片,vue.js,前端,javascript,elementui

总结

其实就是把根组件的图片预览显现,和调用预览方法 都是交给状态管理控制的,这样就用el-image-viewer 实现全局预览图片的功能。文章来源地址https://www.toymoban.com/news/detail-794390.html

~~ End ~~

到了这里,关于用el-image-viewer实现全局预览图片的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包赞助服务器费用

相关文章

  • 【Element】el-dialog 内使用 el-image 并添加 preview-src-list 预览,拖拽导致图片预览不完整问题

    【Element】el-dialog 内使用 el-image 并添加 preview-src-list 预览,拖拽导致图片预览不完整问题

    el-dialog 内使用 el-image 并添加 preview-src-list 预览,拖拽导致图片预览不完整 添加 preview-teleported 属性,官方对这个的解释是: image-viewer 是否插入至 body 元素上。 嵌套的父元素属性会发生修改时应该将此属性设置为 true 解决el-image在el-dialog内预览展示不全

    2024年02月16日
    浏览(8)
  • Element-ui中的el-image的图片预览功能(:preview-src-list)

    Element-ui中的el-image的图片预览功能(:preview-src-list)

    今天用了element-ui中的图片预览功能,但是它的图片预览功能只能预览事先定义的图片,与我的业务功能完全不符,我的业务功能是在表格上显示多张图片,当点击图片时,就预览当前点击的图片。 所以我将其修改了一下,将后端返回的图片依次渲染在页面上;功能就是当点

    2024年02月11日
    浏览(6)
  • 强大的图片预览组件Viewer.js

    强大的图片预览组件Viewer.js

    ​ Viewer.js 是一款强大的图片查看器。我们通过Viewer.js 在页面上添加强大的图片查看功能,同时,这款优秀的插件配置操作起来也非常的方便。 Viewer.js分为2个版本,js版本和jquery版本,下载地址分别为 纯JS版本:https://github.com/fengyuanchen/viewerjs jQuery 版本:GitHub - fengyuanchen/j

    2024年01月18日
    浏览(19)
  • vue3+element-plus+el-image实现点击按钮预览大图

    需求:点击某个按钮实现el-image中预览大图的效果 官方文档:以下是官方的写法,并不能达到我们的要求,官方实现的功能是点击图片达到预览大图的效果。如果你的按钮就是图片,也可以达到目前的功能 el-image-viewer组件是element官方的组件,只是文档中没有写出来,这个组

    2024年02月12日
    浏览(20)
  • flutter开发实战-hero实现图片预览功能extend_image

    flutter开发实战-hero实现图片预览功能extend_image

    flutter开发实战-hero实现图片预览功能extend_image 在开发中,经常遇到需要图片预览,当feed中点击一个图片,开启预览,多个图片可以左右切换swiper,双击图片及手势进行缩放功能。 这个主要实现使用extend_image插件。在点击图片时候使用hero动画进行展示。 Hero简单使用,可以查

    2024年02月08日
    浏览(9)
  • 扩展element-ui el-upload组件,实现复制粘贴上传图片文件,带图片预览功能

    扩展element-ui el-upload组件,实现复制粘贴上传图片文件,带图片预览功能

    控件改造 在窗口的 el-form 控件参数中添加 @paste.native 事件,事件绑定方法名 handlePaste 也可以在其他控件中添加事件监听,看个人需求。 注意: 监听粘贴事件时,需要当前页面先获取焦点,否则无法正常监听, 可以在页面加载后调用 focus() 获取焦点 粘贴功能Js部分参考资料

    2023年04月08日
    浏览(54)
  • Element-ui中表格el-table图片预览效果实现(非常实用)

    Element-ui中表格el-table图片预览效果实现(非常实用)

    🍊作者:计算机编程-吉哥 🍊简介:专业从事JavaWeb程序开发,微信小程序开发,定制化项目、 源码、代码讲解、文档撰写、ppt制作。做自己喜欢的事,生活就是快乐的。 🍊心愿:点赞 👍 收藏 ⭐评论 📝 🍅  文末获取源码联系 🏆先展示效果:   🏆使用的是下面这个插

    2024年02月11日
    浏览(19)
  • el-upload实现可替换、删除、预览的图片上传。js 往返缓存(可判断当前页面是不是返回的页面)

    el-upload实现可替换、删除、预览的图片上传。js 往返缓存(可判断当前页面是不是返回的页面)

    组件使用: UploadImage.vue 组件: BFCache是一种浏览器优化,可实现即时前进和后退载入页面。它改善了用户的浏览体验,尤其是那些网络或设备速度较慢的用户。 *我们可以通过这个方法判断当前页面是不是返回的页面* 在APP站内嵌套h5页面,判断进入拨号页返回情况: 我们需要通

    2024年01月25日
    浏览(43)
  • 整体认识和路由配置、基础数据渲染、热榜区域实现、图片预览组件封装、认识SKU组件、通用组件统一注册全局(详情页)【Vue3】

    整体认识和路由配置、基础数据渲染、热榜区域实现、图片预览组件封装、认识SKU组件、通用组件统一注册全局(详情页)【Vue3】

    整体业务认识 路由配置 准备组件模板 配置路由 绑定模板测试跳转 封装接口 获取数据渲染模版 思考:渲染模版时遇到对象的多层属性访问可能出现什么问题? 模块实现整体分析 结论:两块热榜相比, 结构一致,标题title和列表内容不同 渲染基础热榜数据 1- 准备模版 2- 封

    2024年02月15日
    浏览(12)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包