1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465 |
- import contextMenuVue from './src/index';
- import { isClient } from '/@/utils/is';
- import { Options, Props } from './src/types';
- import { createApp } from 'vue';
- const menuManager: {
- doms: Element[];
- resolve: Fn;
- } = {
- doms: [],
- resolve: () => {},
- };
- export const createContextMenu = function (options: Options) {
- const { event } = options || {};
- try {
- event.preventDefault();
- } catch (e) {
- console.log(e);
- }
- if (!isClient) return;
- return new Promise((resolve) => {
- const wrapDom = document.createElement('div');
- const propsData: Partial<Props> = {};
- if (options.styles !== undefined) propsData.styles = options.styles;
- if (options.items !== undefined) propsData.items = options.items;
- if (options.event !== undefined) {
- propsData.customEvent = event;
- propsData.axis = { x: event.clientX, y: event.clientY };
- }
- createApp(contextMenuVue, propsData).mount(wrapDom);
- const bodyClick = function () {
- menuManager.resolve('');
- };
- const contextMenuDom = wrapDom.children[0];
- menuManager.doms.push(contextMenuDom);
- const remove = function () {
- menuManager.doms.forEach((dom: Element) => {
- try {
- document.body.removeChild(dom);
- } catch (error) {}
- });
- document.body.removeEventListener('click', bodyClick);
- document.body.removeEventListener('scroll', bodyClick);
- try {
- (wrapDom as any) = null;
- } catch (error) {}
- };
- menuManager.resolve = function (...arg: any) {
- resolve(arg[0]);
- remove();
- };
- remove();
- document.body.appendChild(contextMenuDom);
- document.body.addEventListener('click', bodyClick);
- document.body.addEventListener('scroll', bodyClick);
- });
- };
- export const unMountedContextMenu = function () {
- if (menuManager) {
- menuManager.resolve('');
- menuManager.doms = [];
- }
- };
- export * from './src/types';
|