使用v-viewer点击图片预览的组件封装

- 日理万妓 2022-12-10 10:19 198阅读 0赞

1.下载v-viewer

  1. npm install v-viewer -S

2.main.js中引入注册

  1. import Viewer from 'v-viewer'
  2. import 'viewerjs/dist/viewer.css'
  3. Vue.use(Viewer)
  4. Viewer.setDefaults({
  5. 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.封装成组件

ImgPreview.vue

  1. <template>
  2. <div>
  3. <viewer
  4. :options="options"
  5. :images="images"
  6. @inited="inited"
  7. class="viewer"
  8. >
  9. <template >
  10. <img v-for="src in images" :src="src" :key="src" class="images" />
  11. </template>
  12. </viewer>
  13. </div>
  14. </template>
  15. <script>
  16. import 'viewerjs/dist/viewer.css'
  17. import Viewer from 'v-viewer/src/component.vue'
  18. export default {
  19. components: {
  20. Viewer
  21. },
  22. props: {
  23. images: {
  24. type: Array,
  25. default: function () {
  26. return []
  27. }
  28. }
  29. },
  30. data () {
  31. return {
  32. options: {
  33. 'navbar': false
  34. }
  35. }
  36. },
  37. created () {
  38. // console.log(this.images)
  39. },
  40. methods: {
  41. // 这个初始化会在页面初始的时候就执行一次,后续每次传入图片也会自动执行,所有用来转发事件
  42. inited (viewer) {
  43. this.$viewer = viewer
  44. this.$emit('getViewer', viewer)
  45. }
  46. }
  47. }
  48. </script>
  49. <style scoped>
  50. .images{
  51. width: 100px;
  52. height: 100px;
  53. margin: 10px;
  54. }
  55. </style>

父组件调用

  1. <template>
  2. <div>
  3. <a-row>
  4. <a-col :span="24">
  5. <a-descriptions bordered>
  6. <a-descriptions-item
  7. label="图片"
  8. :span="3"
  9. >
  10. <ImgPreview :images="evaluateUrls" @getViewer="getViewer"></ImgPreview>
  11. </a-descriptions-item>
  12. </a-descriptions>
  13. </a-col>
  14. </a-row>
  15. </div>
  16. </template>
  17. <script>
  18. import ImgPreview from './ImgPreview.vue'
  19. export default {
  20. name: 'ResidentDetails',
  21. components: {
  22. ImgPreview
  23. },
  24. data () {
  25. return {
  26. viewer: '',
  27. evaluateUrls: []//获取需要的图片数据
  28. }
  29. },
  30. methods: {
  31. getViewer (viewer) {
  32. if (this.viewer) {
  33. this.$nextTick(() => {
  34. viewer.show()
  35. })
  36. } else { // 先定义这个变量为空,防止第一次页面加载的时候就出现遮罩层
  37. this.viewer = viewer
  38. }
  39. }
  40. }
  41. }
  42. </script>
  43. <style lang='less' scoped>
  44. </style>

#

发表评论

表情:
评论列表 (有 0 条评论,198人围观)

还没有评论,来说两句吧...

相关阅读