ImageListPreview.vue 2.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899
  1. <template>
  2. <div class="image-list-preview">
  3. <el-dialog
  4. :visible.sync="modalIsShow"
  5. title="图片预览"
  6. top="10vh"
  7. width="50%"
  8. :close-on-click-modal="false"
  9. :close-on-press-escape="false"
  10. append-to-body
  11. @open="visibleChange"
  12. >
  13. <div class="image-preview-list">
  14. <div
  15. v-for="(imgUrl, index) in imageList"
  16. :key="imgUrl"
  17. :class="[
  18. 'image-preview-item',
  19. { 'is-active': index === curImageIndex }
  20. ]"
  21. title="点击查看大图"
  22. @click="toPreview(index)"
  23. >
  24. <img :src="imgUrl" :alt="imgUrl" />
  25. </div>
  26. </div>
  27. </el-dialog>
  28. <!-- simple-image-preview -->
  29. <simple-image-preview
  30. :cur-image="curImage"
  31. @on-prev="toPrevImage"
  32. @on-next="toNextImage"
  33. ref="SimpleImagePreview"
  34. ></simple-image-preview>
  35. </div>
  36. </template>
  37. <script>
  38. import SimpleImagePreview from "@/components/SimpleImagePreview";
  39. export default {
  40. name: "image-list-preview",
  41. components: { SimpleImagePreview },
  42. props: {
  43. imageList: {
  44. type: Array,
  45. default() {
  46. return [];
  47. }
  48. }
  49. },
  50. data() {
  51. return {
  52. modalIsShow: false,
  53. curImage: {},
  54. curImageIndex: null
  55. };
  56. },
  57. methods: {
  58. visibleChange() {
  59. this.curImage = {};
  60. this.curImageIndex = null;
  61. },
  62. cancel() {
  63. this.modalIsShow = false;
  64. },
  65. open() {
  66. this.modalIsShow = true;
  67. },
  68. toPreview(index) {
  69. this.curImageIndex = index;
  70. this.selectImage(index);
  71. this.$refs.SimpleImagePreview.open();
  72. },
  73. selectImage(index) {
  74. this.curImage = { url: this.imageList[index] };
  75. },
  76. toPrevImage() {
  77. if (this.curImageIndex === 0) {
  78. this.curImageIndex = this.imageList.length - 1;
  79. } else {
  80. this.curImageIndex--;
  81. }
  82. this.selectImage(this.curImageIndex);
  83. },
  84. toNextImage() {
  85. if (this.curImageIndex === this.imageList.length - 1) {
  86. this.curImageIndex = 0;
  87. } else {
  88. this.curImageIndex++;
  89. }
  90. this.selectImage(this.curImageIndex);
  91. }
  92. }
  93. };
  94. </script>