Vue图片浏览组件v-viewer中文参考文档
0. 基于viewerjs
v-viewer
是基于viewerjs
的
在vue中使用viewerjs

<template>
<div id="index">
<ul>
<li v-for="(item, index) of imgArr" :key="index">
<img :src="item" alt="图片描述" />
</li>
</ul>
</div>
</template>
<script>
import Viewer from 'viewerjs'
import 'viewerjs/dist/viewer.css'
export default {
name: 'HelloWorld',
data() {
return {
imgArr: [
'https://picsum.photos/200/200',
'https://picsum.photos/300/200',
'https://picsum.photos/250/200'
]
}
},
mounted() {
const ViewerDom = document.getElementById('index')
const viewer = new Viewer(ViewerDom, {
})
console.log(viewer)
}
}
</script>
<style>
* {
padding: 0;
margin: 0;
}
ul {
display: flex;
flex-wrap: wrap;
}
ul li {
width: 265px;
height: 180px;
list-style: none;
border: 2px solid #ccc;
border-radius: 3px;
padding: 1px;
margin: 10px;
cursor: pointer;
}
ul li img {
width: 100%;
height: 100%;
}
</style>
1. v-viewer 安装和使用
1.1 安装和引入
npm install v-viewer@1.6.4

import 'viewerjs/dist/viewer.css'
import VueViewer from 'v-viewer'
import Vue from 'vue'
Vue.use(VueViewer)
1.2 三种使用方式:指令、组件、api
- 指令形式: 只需要将
v-viewer
指令添加到任意元素即可,该元素下的所有img
元素都会被viewer
自动处理。
- 组件形式: 引入组件
<viewer>
。使用作用域插槽来定制你的图片展示方式
- api形式: 直接执行函数:
this.$viewerApi({options: {}, images: []})
来展现

<template>
<div>
<div class="images" v-viewer>
<img v-for="src in images" :key="src" :src="src" />
</div>
<viewer :images="images">
<img v-for="src in images" :key="src" :src="src" />
</viewer>
<button type="button" @click="show">Click to show</button>
</div>
</template>
<script>
import 'viewerjs/dist/viewer.css'
import VueViewer from 'v-viewer'
import Vue from 'vue'
Vue.use(VueViewer)
export default {
data() {
return {
images: [
'https://picsum.photos/200/200',
'https://picsum.photos/300/200',
'https://picsum.photos/250/200'
]
}
},
methods: {
show() {
this.$viewerApi({
images: this.images
})
}
}
}
</script>
2.Viewer的配置项 & 方法
参考viewer.js
defaultOptions: {
zIndex: 3000,
inline: false,
button: true,
navbar: true,
title: false,
toolbar: false,
tooltip: true,
movable: true,
zoomable: true,
rotatable: false,
scalable: true,
transition: true,
fullscreen: false,
keyboard: true,
url: 'src',
}
3. 在实际项目中使用
3.1 在main.js中全局注册
import Viewer from 'v-viewer'
import 'viewerjs/dist/viewer.css'
Vue.use(Viewer)
Viewer.setDefaults({
Options: {
inline: true,
button: true,
navbar: true,
title: true,
toolbar: true,
tooltip: true,
movable: true,
zoomable: true,
rotatable: true,
// "scalable": true,
transition: true,
fullscreen: true,
keyboard: true,
url: 'data-source'
}
})
3.2 单独封装一个图片预览组件
<template>
<viewer :images="imgList" class="descimgBox">
<img
v-for="(decImg, index) in imgList"
:key="index"
:src="decImg"
:style="{ 'object-fit': imgStyle, 'border-radius': borderRadius }"
/>
</viewer>
</template>
<script>
export default {
name: 'VViewer',
props: {
options: {
type: Array,
required: true
},
imgStyle: {
type: String,
default() {
return 'contain'
}
},
borderRadius: {
type: String,
default: '0px'
}
},
data() {
return {
imgList: []
}
},
created() {
this.imgList = this.options
},
methods: {}
}
</script>
<style scoped>
.descimgBox {
width: 100%;
height: 100%;
overflow: auto;
display: flex;
align-items: baseline;
}
.descimgBox img {
width: 90%;
height: 80%;
margin: 5px 1%;
cursor: zoom-in;
}
</style>
3.3 使用图片预览组件
<template>
<VViewer
:options="imgPath ? [baseUrl + imgPath] : imgList"
:imgStyle="'cover'"
:border-radius="'8px'"
:style="
imgPath ? 'width: 140px; height: 70px' : 'width: 420px; height: 70px'
"
></VViewer>
</template>
<script>
import VViewer from '@/components/vviewer'
export default {
name: 'ImgViewer',
components: { VViewer },
data() {
return {
baseUrl: 'https://picsum.photos/',
imgPath: '',
imgList: [
'https://picsum.photos/200/200',
'https://picsum.photos/300/200',
'https://picsum.photos/250/200'
]
}
}
}
</script>
