在 Ckeditor 5 中监听鼠标右键(上下文菜单)

Posted

技术标签:

【中文标题】在 Ckeditor 5 中监听鼠标右键(上下文菜单)【英文标题】:Listen for right mouse button(Context menu) in Ckeditor 5 【发布时间】:2019-03-21 00:26:53 【问题描述】:

当用户单击编辑器中的元素时,如何在 Ckeditor 5 中侦听鼠标右键(上下文菜单激活)。

对于鼠标左键,我使用 ClickObserver 效果很好,但 ClickObserver 似乎不适用于鼠标右键

【问题讨论】:

【参考方案1】:

根据CKEditor migration document,CKEditor 5 中删除了上下文菜单选项,官方标准是使用contextualToolbar。

CKEditor 5 没有上下文菜单,上下文内联 工具栏更适合提供上下文操作。

更新:

我发现了一个你可以使用的 hack,但我不会推荐它,所以使用它,后果自负!

function onEditorMouseDown(evt) 
  if (evt.which == 3) 
    alert('You right clicked the editor!');
  


var elem = document.querySelector('#editor1');
var cEditor = ClassicEditor
  .create(elem)
  .then(function(editor) 
    let container = editor.ui.view.editable.element;
    if (container) 
      container.addEventListener('mousedown', onEditorMouseDown);
    
  )
  .catch(function(err) 
    console.error(err.stack);
  );
<script src="https://cdn.ckeditor.com/ckeditor5/11.1.1/classic/ckeditor.js"></script>
<h1>CKEditor 5 Example</h1>
<textarea id="editor1"></textarea>

说明:

我在这里所做的是找出编辑器中的可编辑区域,并为元素上的 mousedown 事件添加事件侦听器。

我希望这会有所帮助!

【讨论】:

我不打算使用 ckeditor 上下文菜单(我们不使用 ckeditor 5 的任何 ui 部分)。但是监听鼠标右键事件的能力真的被移除了吗? 对不起,我一直忙于其他问题。这看起来可能有效,但是我有一个问题是要准确找出用户单击的模型中的哪个元素。但它认为我可以通过获取用户单击的 dom 元素,然后使用映射类来获取该 dom 元素的视图节点来解决这个问题。然后获取该视图代码的模型元素。 是的,您可以使用 event.target 找出点击了哪个元素。

以上是关于在 Ckeditor 5 中监听鼠标右键(上下文菜单)的主要内容,如果未能解决你的问题,请参考以下文章

怎样设置鼠标右键菜单

我的鼠标右键不弹出菜单了,怎么回事?

JS捕获鼠标右键菜单中的粘贴时间

MS Access 2010 运行时 - 连续表单中缺少鼠标右键单击上下文菜单

jquery监听ctrl + c 和 鼠标右键“复制”事件

OnContextMenu实现禁止鼠标右键