Loading.js 1.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142
  1. import { render, h } from 'vue'
  2. import { hasOwn } from '@vue/shared'
  3. import CancelLoadingConstructor from './index.vue'
  4. function CancelLoading (options) {
  5. const container = document.createElement('div')
  6. let timeout = null
  7. options.onVanish = () => {
  8. options.onCancel && options.onCancel()
  9. clearTimeout(timeout)
  10. timeout = null
  11. render(null, container)
  12. }
  13. const vnode = h(CancelLoadingConstructor, options)
  14. render(vnode, container)
  15. document.body.appendChild(container)
  16. const instance = vnode.component
  17. const vm = instance.proxy
  18. // eslint-disable-next-line no-unused-vars
  19. for (const prop in options) {
  20. if (hasOwn(options, prop) && !hasOwn(vm.$props, prop)) {
  21. vm[prop] = options[prop]
  22. }
  23. }
  24. vm.visible = true
  25. // options = {message, btnName, duration: 2000}
  26. timeout = setTimeout(() => {
  27. vm.visible = false
  28. }, options.duration || 2000)
  29. const hide = () => {
  30. vm.visible = false
  31. clearTimeout(timeout)
  32. timeout = null
  33. }
  34. return {
  35. hide
  36. }
  37. }
  38. export default CancelLoading