vue-img-viewr
❗ vue图片查看组件(vue image viewer component),1.x
版本为vue@2.x
组件
❗ 如需在vue@3.x
中使用,请使用 , Github v2.x地址
yarn add vue-img-viewr
npm i vue-img-viewr -S
示例
demo展示
用法
yarn add vue-img-viewr@^1.0.5
npm i vue-img-viewr@^1.0.5 -S
使用,SPA,非SSR
import Vue from 'vue'
import { showImages } from 'vue-img-viewr'
import 'vue-img-viewr/styles/index.css'
Vue.prototype.$showImages = showImages
this.$showImages({
urls: this.urls,
index
})
import ImgViewr, { showImages } from 'vue-img-viewr'
import 'vue-img-viewr/styles/index.css'
export default {
components: { ImgViewr },
data () {
return {
urls: [
'https://s.gravatar.com/avatar/221f86a573320174bad7a62886a6d4b4?size=100&default=retro',
'https://s.gravatar.com/avatar/221f86a573320174bad7a62886a6d4b4',
'https://static.npmjs.com/attachments/ck3uwf5d872zb8874c3ayi1pj-icon-pro-wombat-3x.png'
],
index: 0,
visible: false
}
},
methods: {
showImagesByComponent (index) {
this.visible = true
this.index = index
},
onShow (isShow) {
console.log(isShow)
},
showImagesByJs (index) {
showImages({
urls: this.urls,
index,
onShow: this.onShow
})
}
}
}
服务端渲染(SSR)中使用,以Nuxtjs为例
import Vue from 'vue'
import ImgViewr, { showImages } from 'vue-img-viewr'
import 'vue-img-viewr/styles/index.css'
export default () => {
Vue.prototype.$showImages = showImages
Vue.component(ImgViewr.name, ImgViewr)
}
plugins: [
{ src: '@/plugins/vue-img-viewr', ssr: false }
]
export default {
data () {
return {
urls: [
'https://s.gravatar.com/avatar/221f86a573320174bad7a62886a6d4b4?size=100&default=retro',
'https://s.gravatar.com/avatar/221f86a573320174bad7a62886a6d4b4',
'https://static.npmjs.com/attachments/ck3uwf5d872zb8874c3ayi1pj-icon-pro-wombat-3x.png'
],
index: 0,
visible: false
}
},
methods: {
showImagesByComponent (index) {
this.visible = true
this.index = index
},
onShow (isShow) {
console.log(isShow)
},
showImagesByJs (index) {
this.$showImages({
urls: this.urls,
index,
onShow: this.onShow
})
}
}
}
示例组件使用
<div class="demo">
<h3>通过组件方式</h3>
<div class="imgs">
<div v-for="(url, i) in urls" class="img" :key="`c_${i}`" @click="() => showImagesByComponent(i)">
<img :src="url" />
</div>
</div>
<ImgViewr :visible="visible" :urls="urls" :initialIndex="index" :on-show="onShow" :on-close="() => (visible = false)" />
<h3>通过js方法调用</h3>
<div class="imgs">
<div v-for="(url, i) in urls" class="img" :key="`j_${i}`" @click="() => showImagesByJs(i)">
<img :src="url" />
</div>
</div>
</div>
示例样式
.imgs {
display: flex;
}
.img {
width: 150px;
height: 100px;
border: 1px solid #EEE;
display: flex;
align-items: center;
justify-content: center;
margin: 20px;
}
.img img {
max-width: 100%;
max-height: 100%;
cursor: pointer;
}
参数
Attributes
参数 | 说明 | 类型 | 可选值 | 默认值 |
---|
urls | 需要展示的图片url数组(必须参数) | array<string> | — | — |
visible | 是否显示组件(仅限于通过组件方式参数) | boolean | true / false | — |
initialIndex | 初始显示的图片索引(仅限于通过组件方式参数) | number | — | 0 |
index | 显示的图片索引(仅限于通过js方法调用参数) | number | — | 0 |
onSwitch | 图片切换函数 Function(index) | function | — | — |
onClose | 关闭函数(通过js方法调用,返回true才会关闭;组件方式可以直接设置visible为false) | function | — | — |
onShow | 组件显示关闭监听 Function(isShow) (主要用于js方式调用) | function | — | — |
zIndex | 层级 | number | — | 3000 |
lockScroll | 是否在查看图片时将 body 滚动锁定 | boolean | true / false | true |
closeOnClickMask | 点击蒙层关闭 | boolean | true / false | true |