图片画廊
特性
- viewerjs + swiper + qrcode 组合拳
- 展示形式: 支持 文档流、自适应瀑布流、轮播图、嵌套在表格内
- 数据格式: 支持 URL、Base64、二维码、object URL
- 数据类型: 支持 string、JSON string、object、any[]
- 局部注册 + 局部传参,也可以全局注册 + 全局传参(vue-global-config 提供技术支持)
安装
外置依赖
局部注册
npm add pic-viewer
<template>
<PicViewer v-bind="{/* 局部配置 */}" />
</template>
<script>
import PicViewer from 'pic-viewer'
export default {
components: { PicViewer },
}
</script>
全局注册
npm add pic-viewer
import PicViewer from 'pic-viewer'
Vue.use(PicViewer, {
})
CDN + ESM
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8" />
</head>
<body>
<div id="app">
<pic-viewer
value="xxx"
qrcode
></pic-viewer>
</div>
<script type="importmap">
{
"imports": {
"vue": "https://unpkg.com/vue@2/dist/vue.esm.browser.min.js",
"pic-viewer": "https://unpkg.com/pic-viewer@0.8/dist/pic-viewer.mjs"
}
}
</script>
<script type="module">
import Vue from 'vue'
import PicViewer from 'pic-viewer'
new Vue({
components: { PicViewer },
}).$mount('#app')
</script>
</body>
</html>
CDN + UMD
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8" />
</head>
<body>
<div id="app">
<pic-viewer
value="xxx"
qrcode
></pic-viewer>
</div>
<script src="https://unpkg.com/vue@2"></script>
<script src="https://unpkg.com/pic-viewer@0.8"></script>
<script>
new Vue({
components: { PicViewer },
}).$mount('#app')
</script>
</body>
</html>
Props
名称 | 说明 | 类型 | 默认值 |
---|
value | 绑定值 | string, string[], object[] | |
pattern | 展示模式(waterfall , swiper 或 table-cell ) | string | undefined (即文档流) |
srcAt | 图片 src 的位置 | string, function, symbol | |
viewerjs | 是否启用 viewerjs | boolean | true |
viewerjsProps | viewerjs 的参数 | object | { zIndex: 5000, zoomRatio: 0.4 } |
swiperProps | swiper 的参数 | object | { observer: true } |
qrcode | 是否将 value 转换为二维码 | boolean, 'auto' | false |
qrcodeProps | qrcode 的参数 | object | { margin: 0, errorCorrectionLevel: 'L', width: 444, height: 444 } |
qrcode
如果将 qrcode
设为 'auto'
,pic-viewer
会自动判断是否需要转换(value
为 Base64 或 URL 时不会转换)
srcAt
当 value
是对象或数组类型,需要指定图片 src 的位置
- 支持属性名,如
'url'
- 支持属性路径,如
'data[0].url'
- 支持 symbol 类型的属性名
- 支持 function,如
({ url }) => url
Events
名称 | 说明 | 回调参数 |
---|
click | 点击图片后触发 | (src: string, index: number) |
Slots
<PicViewer>
<template #default="{ src, index }">
<img :src="src">
<div>第{{ index + 1 }}张</div>
</template>
</PicViewer>
Methods
名称 | 说明 | 参数 |
---|
preview | 手动预览 | 数组下标,默认值为0 |
编程式调用预览
<PicViewer
ref="PicViewer"
v-show="false"
:value="value"
/>
<button @click="() => { $refs.PicViewer.preview(6) }">
预览
</button>
二维码清晰度
默认的图片 CSS 高度为148px(与 el-upload
保持一致),默认的二维码分辨率为444×444(三倍图),如果你增大了图片的 CSS 尺寸,将导致图片变模糊
解决: 将二维码分辨率设置为展示尺寸的三倍
<template>
<PicViewer
:qrcodeProps="{
width: 900,
height: 900,
}"
/>
</template>
<style scoped>
:deep(.pic-viewer) img {
width: 300px;
height: 300px;
}
</style>
获取 Swiper 实例
<template>
<PicViewer
ref="picViewer"
pattern="swiper"
:swiperProps="{
on: {
init: onSwiperInit,
},
}"
/>
</template>
<script>
import PicViewer from 'pic-viewer'
export default {
components: { PicViewer },
data() {
return {
swiper: null
}
},
methods: {
onSwiperInit() {
this.$nextTick(() => {
this.swiper = this.$refs.picViewer.swiper
})
}
}
}
</script>
更新日志
各版本详细改动请参考 release notes 。