step1: 外部应用结合自己框架,配置拖拽起始位置组件

示例,拖拽一个按钮插入配置好的元素

<el-button id="draggerAndInsertElement" size="mini" type="primary" draggable="true">拖拽插入元素</el-button>         

step2: 拖拽起始时,向拖拽事件写入 功能数据

  • 注意:浏览器”dragstart”事件处理不支持async异步写法
  • 拖拽的输入参数param完全由用户自定义,但必需是个对象。属性名draggerType本身也是可以自定义的。
  • 相关param对应在step4 解析使用
draggerWidget = document.getElementById('draggerAndInputFragment');
draggerWidget.addEventListener('dragstart', function (event) {
  let param = { draggerType: 'InputFragment' };/*注意:参数完全有用户自定义,格式和内容可以附加其他信息*/
  event.dataTransfer.setData('data', JSON.stringify(param));
});

step3: 外部应用注册向编辑器注册拖拽结束处理事件

示例,拖拽一个按钮插入配置好的元素

   import {E_EVENT_KEY } from '@/components/editor/ThinkEditor.Defined';

   thinkEditor.addEventListener(E_EVENT_KEY.drop, this.OnDrop);      

step4: 在拖拽结束处理事件中,编写对应功能代码

   async OnDrop(event /*ThinkEditorEvent*/) {
      let data = event.data.data; //用户自定义的数据,对应step2
      editorLogger.LogEvent('OnDrop:', data);

      if (data.draggerType == 'InsertElement') {
        this.InsertElementTest(event.data);
      } else if (data.draggerType == 'InputFragment') {
        await this.InputFragmentTest(event.data);
      }
    }
  • 如下示例:在同步方法中向拖拽松开位置插入一个元素
    InsertElementTest(data) {
      let thinkEditor = data.editor;//拖拽松开位置编辑器

      thinkEditor.InsertElement({});
    }
  • 如下示例:在异步方法中向拖拽松开位置插入一个片段
    async InputFragmentTest(data) {
      let thinkEditor = data.editor;//拖拽松开位置编辑器

      var fragment_file = 'BingChengFragment.xml';
      var url = '/system/fragment/' + fragment_file;
      let response = await fetch(url, {
        credentials: 'same-origin'
      });
      let xmlArray = await response.arrayBuffer();
      const decoder = new TextDecoder('utf-8');
      const xmlStr = decoder.decode(xmlArray);
      thinkEditor.InputFragment(xmlStr, {});
    }

拖拽插入任意对象或内容

请联系技术人员对接

文档更新时间: 2025-04-23 21:35   作者:admin