AdvanceViewImage.vue 1.3 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879
  1. <template>
  2. <viewer
  3. :images="items"
  4. :options="options"
  5. class="viewer"
  6. ref="viewer"
  7. @inited="inited"
  8. style="display: none"
  9. >
  10. <template slot-scope="scope">
  11. <img
  12. v-for="(item, i) in scope.images"
  13. :src="item.src"
  14. :key="i"
  15. :alt="item.alt"
  16. />
  17. {{ scope.options }}
  18. </template>
  19. </viewer>
  20. </template>
  21. <script>
  22. export default {
  23. name: 'AdvanceViewImage',
  24. props: {
  25. items: {
  26. type: Array,
  27. default: () => []
  28. },
  29. index: {
  30. type: Number,
  31. default: 0
  32. }
  33. },
  34. data() {
  35. return {
  36. value: false,
  37. options: {
  38. zIndex: 9999,
  39. hidden: () => {
  40. this.$emit('input', false);
  41. }
  42. }
  43. };
  44. },
  45. mounted() {
  46. this.value = true;
  47. },
  48. methods: {
  49. inited(viewer) {
  50. this.$viewer = viewer;
  51. },
  52. showById(id, list) {
  53. let index = 0;
  54. this.items.forEach((x, i) => {
  55. if (x.id === id) {
  56. index = i;
  57. }
  58. });
  59. this.$viewer.view(index);
  60. },
  61. showByIndex(index) {
  62. this.$viewer.view(index);
  63. }
  64. },
  65. watch: {
  66. value: {
  67. handler(val) {
  68. if (val) {
  69. this.showByIndex(this.index);
  70. } else {
  71. this.$emit('cancel');
  72. }
  73. }
  74. }
  75. }
  76. };
  77. </script>