如何检测TinyMCE编辑器内部任意元素的拖放操作?
TinyMCE编辑器内部元素拖放检测实现方案
原生绑定dragend事件无法触发的核心原因:TinyMCE编辑区域为独立的可编辑上下文,内部完成的拖放操作会被编辑器默认的内容移动/插入逻辑消费,终止了原生dragend事件向上冒泡到editor实例,只有拖出编辑器范围的操作才会触发该事件。
正确实现方式如下:
- 第一步:绑定
dragstart事件,标记编辑器内部被拖拽的元素
let draggedInnerEl = null; editor.on('dragstart', function (e) { // 可按需筛选需要监听的元素,比如仅监听图片拖拽可加判断 e.target.tagName === 'IMG' draggedInnerEl = e.target; });
- 第二步:绑定
drop事件,捕获编辑器范围内的拖放完成操作
editor.on('drop', function (e) { // 仅处理编辑器内部元素的拖放 if (draggedInnerEl) { // 此处填写内部拖放完成后的业务逻辑 alert('内部元素拖放完成'); // 处理完重置标记 draggedInnerEl = null; // 拓展:可通过e.target获取拖放落点的元素,结合draggedInnerEl做定制处理 // const dropTarget = e.target; } });
- 可选补充:如果需要监听拖拽离开编辑器的操作,可保留原有
dragend事件逻辑做对应处理。
内容的提问来源于stack exchange,提问作者g_b
相关产品推荐
相关产品推荐

