Vue3封装图片流形式单张图片预览

图片预览组件:

<template>
    <!-- element-plus内置图片预览组件 -->
    <el-image-viewer 
        v-if="viewerImage.visible" 
        :urlList="viewerImage.urlList" 
        @close="closeViewer"
    />
</template>

<script setup>
import { reactive } from "vue";
import { ElLoading } from 'element-plus'

const viewerImage = reactive({
    visible: false,
    urlList: [],
})

// 关闭
const closeViewer = () => {
    viewerImage.visible = false;
    // 释放ObjectUrl类型的内存
    viewerImage.urlList.forEach(src => {
        if(src.includes('blob')) {
            URL.revokeObjectURL(src);
        }
    })
}

// 外部以api的形式调用,单张图片预览
const view = (src) => {
    if(src) {
        viewerImage.urlList = [src];
        viewerImage.visible = true;
    }
}

// 外部调用loading
let loading = null;
const setLoading = (isLoading) => {
    if(isLoading) {
        loading = ElLoading.service({
            lock: true,
            text: '加载中...',
            background: 'rgba(0, 0, 0, 0.7)',
        })
        return;
    }
    loading && loading.close();
}

defineExpose({
    view,
    setLoading
})
</script>

<style lang="scss" scoped>
</style>

调用:

<SingleImageViewer ref="imageViewerRef"/>

// 1.请求返回图片流形式:
imageViewerRef = ref();
const viewImage = () => {
    imageViewerRef.value.setLoading(true);
    Api(...).then(file => {
        let src = URL.createObjectURL(file);
        imageViewerRef.value.setLoading(false);
        imageViewerRef.value.view(src);
    });
}

// 2.直接预览:
imageViewerRef.value.view(src);

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值