Vue项目使用v-viewer插件实现图片预览、切换、缩放、旋转...

参考文档:Vue图片浏览组件v-viewer,支持旋转、缩放、翻转等操作 | Mirari's Bloghttps://mirari.cc/2017/08/27/Vue%E5%9B%BE%E7%89%87%E6%B5%8F%E8%A7%88%E7%BB%84%E4%BB%B6v-viewer%EF%BC%8C%E6%94%AF%E6%8C%81%E6%97%8B%E8%BD%AC%E3%80%81%E7%BC%A9%E6%94%BE%E3%80%81%E7%BF%BB%E8%BD%AC%E7%AD%89%E6%93%8D%E4%BD%9C/

①安装插件:yarn add v-viewer

②在要使用的页面中局部引入或者在main.js中全局引入并配置插件:

import Vue from 'vue'
import Viewer from 'v-viewer'
import 'viewerjs/dist/viewer.css'

Vue.use(Viewer)
Viewer.setDefaults({
  Options: {
    inline: true, // 是否启用inline模式
    button: true, // 是否显示右上角关闭按钮
    navbar: true, // 是否显示缩略图底部导航栏
    title: true, // 是否显示当前图片标题,默认显示alt属性内容和尺寸
    toolbar: true, // 是否显示工具栏
    tooltip: true, // 放大或缩小图片时,是否显示缩放百分比,默认true
    fullscreen: true, // 播放时是否全屏,默认true
    loading: true, // 加载图片时是否显示loading图标,默认true
    loop: true, // 是否可以循环查看图片,默认true
    movable: true, // 是否可以拖动图片,默认true
    zoomable: true, // 是否可以缩放图片,默认true
    rotatable: true, // 是否可以旋转图片,默认true
    scalable: true, // 是否可以翻转图片,默认true
    toggleOnDblclick: true, // 放大或缩小图片时,是否可以双击还原,默认true
    transition: true, // 使用 CSS3 过度,默认true
    keyboard: true, // 是否支持键盘,默认true
    zoomRatio: 0.1, // 鼠标滚动时的缩放比例,默认0.1
    minZoomRatio: 0.01, // 最小缩放比例,默认0.01
    maxZoomRatio: 100, // 最大缩放比例,默认100
    url: 'data-source' // 设置大图片的 url
  }
})

③使用指令或组件的形式进行图片展示:

<-- 使用指令 -->
<div class="m-image" v-viewer>
    <img
        v-for="(image, index) in images"
        :key="index"
        :src="image.url"
        :alt="image.name"
        class="u-image" />
</div>

data () {
    return {
        images: []
    }
}
<style lang="less" scoped>
.m-image {
  min-width: 1200px;
}
.u-image {
  max-width: 400px;
  cursor: pointer;
}
</style>
<-- 使用组件 -->
<viewer :images="images">
    <img
        v-for="(image, index) in images"
        :key="index"
        :src="image.url"
        :alt="image.name"
        class="u-image" />
</viewer>

data () {
    return {
        images: []
    }
}
<style lang="less" scoped>
.u-pic {
  max-width: 400px;
  cursor: pointer;
}
</style>

实际需求中可能需要在和用户的交互过程中实时更新images数组,如果使用:this.images[1] = {...} 则不会正常更新。具体原因是由于Vue无法检测到通过索引直接设置数组项进行更新,可以通过以下两种方式进行解决:

1.使用this.$set(...)对数组进行赋值(推荐):

        this.$set(this.images, 1, {…})

2.使用this.$forceUpdate()来强制更新(不建议)

④若想更改预览组件样式,可在node_modules/viewerjs/dist/里面进行相关更改重写

viewer.css中更改相关CSS样式

viewer.js中更改相关函数

  • 7
    点赞
  • 24
    收藏
    觉得还不错? 一键收藏
  • 4
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值