UNPKG

ivue-material-plus

Version:

A high quality UI components Library with Vue.js

1 lines 9.61 kB
{"version":3,"file":"createLoadingComponent.mjs","sources":["../../../../../src/components/ivue-loading/createLoadingComponent.ts"],"sourcesContent":["import {\r\n createApp,\r\n createVNode,\r\n reactive,\r\n ref,\r\n toRefs,\r\n h,\r\n Transition,\r\n vShow,\r\n withCtx,\r\n withDirectives,\r\n} from 'vue';\r\nimport { removeClass } from '../../utils/assist';\r\n\r\n// ts\r\nimport type { LoadingOptionsResolved } from './types/loading';\r\n\r\nexport function createLoadingComponent(options: LoadingOptionsResolved) {\r\n // 离开后的时间\r\n let afterLeaveTimer: number;\r\n\r\n // 离开的标志\r\n const afterLeaveFlag = ref(false);\r\n\r\n const data = reactive({\r\n // 选项\r\n ...options,\r\n // 定位\r\n originalPosition: '',\r\n // 显示/隐藏\r\n originalOverflow: '',\r\n // 是否隐藏\r\n visible: false,\r\n });\r\n\r\n // 设置文字\r\n function setText(text: string) {\r\n data.text = text;\r\n }\r\n\r\n // 销毁\r\n function destroySelf() {\r\n // 父节点\r\n const target = data.parent;\r\n\r\n if (!target.LoadingAddClassList) {\r\n let loadingNumber: number | string | null =\r\n target.getAttribute('loading-number');\r\n loadingNumber = Number.parseInt(loadingNumber as any) - 1;\r\n\r\n // 删除当前loading\r\n if (!loadingNumber) {\r\n // 删除相对定位\r\n removeClass(target, 'ivue-loading-parent--relative');\r\n\r\n target.removeAttribute('loading-number');\r\n }\r\n // add loading-number to parent\r\n else {\r\n target.setAttribute('loading-number', loadingNumber.toString());\r\n }\r\n\r\n // 删除隐藏\r\n removeClass(target, 'ivue-loading-parent--hidden');\r\n }\r\n\r\n // 删除节点\r\n removeLoadingChild();\r\n\r\n loadingInstance.unmount();\r\n }\r\n\r\n // 删除节点\r\n function removeLoadingChild(): void {\r\n vm.$el?.parentNode?.removeChild(vm.$el);\r\n }\r\n\r\n // 关闭\r\n function close() {\r\n // 自定义 beforeClose\r\n if (options.beforeClose && !options.beforeClose()) {\r\n return;\r\n }\r\n\r\n // 离开的标志\r\n afterLeaveFlag.value = true;\r\n\r\n // 延迟销毁关闭 400 ms\r\n clearTimeout(afterLeaveTimer);\r\n\r\n // 销毁元素\r\n afterLeaveTimer = window.setTimeout(handleAfterLeave, 400);\r\n\r\n // 关闭\r\n data.visible = false;\r\n\r\n // close\r\n options.close?.();\r\n }\r\n\r\n // 离开方法\r\n function handleAfterLeave() {\r\n if (!afterLeaveFlag.value) {\r\n return;\r\n }\r\n\r\n afterLeaveFlag.value = false;\r\n\r\n // 清除class\r\n const target = data.parent;\r\n target.LoadingAddClassList = undefined;\r\n\r\n // 销毁元素\r\n destroySelf();\r\n }\r\n\r\n // 节点元素\r\n const LoadingComponent = {\r\n name: 'ivue-loading',\r\n setup() {\r\n return () => {\r\n // 圆形\r\n const spinner = h(\r\n 'svg',\r\n {\r\n class: 'circular',\r\n viewBox: '25 25 50 50',\r\n },\r\n [\r\n h('circle', {\r\n class: 'path',\r\n cx: '50',\r\n cy: '50',\r\n r: '20',\r\n fill: 'none',\r\n }),\r\n ]\r\n );\r\n\r\n // 图标\r\n const noSpinner = h('i', { class: data.iconClass }, data.iconText);\r\n\r\n // 需要渲染的文字\r\n const spinnerText = h('span', { class: 'ivue-loading-text' }, [\r\n data.text,\r\n ]);\r\n\r\n // 渲染\r\n return h(\r\n Transition,\r\n {\r\n name: 'ivue-loading-fade',\r\n onAfterLeave: handleAfterLeave,\r\n },\r\n {\r\n default: withCtx(() => [\r\n withDirectives(\r\n createVNode(\r\n 'div',\r\n {\r\n style: {\r\n backgroundColor: data.background || '',\r\n },\r\n class: [\r\n 'ivue-loading-mask',\r\n data.customClass,\r\n data.fullscreen ? 'is-fullscreen' : '',\r\n ],\r\n },\r\n [\r\n h(\r\n 'div',\r\n {\r\n class: 'ivue-loading-spinner',\r\n },\r\n h(\r\n 'div',\r\n {\r\n class: 'ivue-loading-spinner--content',\r\n },\r\n [\r\n // 图标渲染函数\r\n data.loadingSpinner\r\n ? data.loadingSpinner()\r\n : !data.iconClass\r\n ? spinner\r\n : noSpinner,\r\n data.text ? spinnerText : null,\r\n ]\r\n )\r\n ),\r\n ]\r\n ),\r\n [[vShow, data.visible]]\r\n ),\r\n ]),\r\n }\r\n );\r\n };\r\n },\r\n };\r\n\r\n // 创建节点\r\n const loadingInstance = createApp(LoadingComponent);\r\n const vm = loadingInstance.mount(document.createElement('div'));\r\n\r\n return {\r\n ...toRefs(data),\r\n setText,\r\n close,\r\n removeLoadingChild,\r\n handleAfterLeave,\r\n vm,\r\n get $el(): HTMLElement {\r\n return vm.$el;\r\n },\r\n };\r\n}\r\n\r\nexport type LoadingInstance = ReturnType<typeof createLoadingComponent>;\r\n"],"names":[],"mappings":"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"}