gpt4 book ai didi

javascript - 如何在 ACE 编辑器中禁用装订线单击时的行选择?

转载 作者:行者123 更新时间:2023-12-03 09:49:34 26 4
gpt4 key购买 nike

我正在尝试禁用所有用户与 ace 编辑器的交互。我设法通过以下设置停止大多数交互:

codeEditor.setReadOnly(true);
codeEditor.setHighlightActiveLine(false);
codeEditor.setHighlightGutterLine(false);
codeEditor.container.style.pointerEvents = "none";
codeEditor.renderer.$cursorLayer.element.style.opacity = 0;

但是,虽然现在禁用了大部分交互性,但装订线上的 mousedown 事件仍然有效。例如,当您单击装订线时,它仍然选择该行上的文本。其他事件(例如双击全选或代码折叠)似乎也有效。您可以在这里检查: http://jsfiddle.net/squarePenguin/zhpms1mm/

我尝试删除排水沟上的听众,但似乎没有任何效果。这是我尝试过的一切:

codeEditor.getSession().removeAllListeners("guttermousedown");
codeEditor.getSession().removeAllListeners("gutterclick");
codeEditor.getSession().removeAllListeners("gutterdblclick");
codeEditor.getSession().removeAllListeners("guttermousemove");
codeEditor.getSession().removeAllListeners("click");
codeEditor.getSession().removeAllListeners("mousedown");

你有什么想法吗?感谢您的耐心等待!

最佳答案

你可以这样做

stop = function(e) {e.stop()}
editor.on("guttermousedown", stop, true);
editor.on("gutterclick", stop, true);
editor.on("gutterdblclick", stop, true);
editor.on("guttermousemove", stop, true);
editor.on("click", stop, true);
editor.on("mousedown", stop, true);

codeEditor.getSession().removeAllListeners 不起作用,因为鼠标事件是在编辑器而不是 session 上分派(dispatch)的,并且 removeAllListeners 不会删除 defaultHandlers

codeEditor.container.style.pointerEvents = "none"; 不起作用,因为 ace 中的某些元素具有 pointerEvents="auto" 样式。

关于javascript - 如何在 ACE 编辑器中禁用装订线单击时的行选择?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30916113/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com