index.js 1.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657
  1. import Vue from 'vue';
  2. import VueImagePreview from './ImagePreview';
  3. import { isServer } from '../utils';
  4. let instance;
  5. const defaultConfig = {
  6. images: [],
  7. loop: true,
  8. value: true,
  9. minZoom: 1 / 3,
  10. maxZoom: 3,
  11. className: '',
  12. lazyLoad: false,
  13. showIndex: true,
  14. asyncClose: false,
  15. startPosition: 0,
  16. showIndicators: false
  17. };
  18. const initInstance = () => {
  19. instance = new (Vue.extend(VueImagePreview))({
  20. el: document.createElement('div')
  21. });
  22. document.body.appendChild(instance.$el);
  23. };
  24. const ImagePreview = (images, startPosition = 0) => {
  25. /* istanbul ignore if */
  26. if (isServer) {
  27. return;
  28. }
  29. if (!instance) {
  30. initInstance();
  31. }
  32. const options = Array.isArray(images) ? { images, startPosition } : images;
  33. Object.assign(instance, defaultConfig, options);
  34. instance.$once('input', show => {
  35. instance.value = show;
  36. });
  37. if (options.onClose) {
  38. instance.$once('close', options.onClose);
  39. }
  40. return instance;
  41. };
  42. ImagePreview.install = () => {
  43. Vue.use(VueImagePreview);
  44. };
  45. export default ImagePreview;