【问题标题】:RTL support in Ace Editor - Arrow KeysAce Editor 中的 RTL 支持 - 箭头键
【发布时间】:2019-08-29 08:00:08
【问题描述】:

当我键入希伯来语时,箭头键会向相反方向移动光标。 有什么解决办法吗? 谢谢

【问题讨论】:

  • 这是 windows 编辑器的默认约定,如果你也想要 mac 编辑器的行为,请尝试打开 github 功能请求。

标签: javascript ace-editor


【解决方案1】:

关于这个问题有an open GitHub issue。不幸的是,似乎还没有实现真正的从右到左的支持。

无论如何,您可以尝试以下方法之一来解决问题:

1) 在 Ace 容器中使用 CSS direction property 强制从右到左渲染。虽然它与文本样式有关,但也许它会有所帮助。

2) 如果这没有帮助,您可以尝试捕获箭头事件并发送“假事件”(参见 this StackOverflow post 以获取代码参考):

function triggerFakeKeyEvent(keycode) {
    let keyboardEvent = document.createEvent("KeyboardEvent");
    let initMethod = typeof keyboardEvent.initKeyboardEvent !== 'undefined' ? "initKeyboardEvent" : "initKeyEvent";

    keyboardEvent[initMethod](
        "keydown", // event type: keydown, keyup, keypress
        true,      // bubbles
        true,      // cancelable
        window,    // view: should be window
        false,     // ctrlKey
        false,     // altKey
        false,     // shiftKey
        false,     // metaKey
        keycode,   // keyCode: unsigned long - the virtual key code, else 0
        0          // charCode: unsigned long - the Unicode character associated with the depressed key, else 0
);
    document.dispatchEvent(keyboardEvent);
}

document.addEventListener('keydown', function(event) {
    // left arrow key
    if(event.keyCode === 37) {
        event.preventDefault();  // ignore the original keyboard event
        triggerFakeKeyEvent(39);
    }
    // right arrow key
    else if(event.keyCode === 39) {
        event.preventDefault();  // ignore the original keyboard event
        triggerFakeKeyEvent(37);
    }
});

【讨论】:

  • 谢谢你,我会试试你的建议!
  • 当焦点在编辑器上时,该事件不执行。在文档的其余部分工作。我正在考虑将您的代码附加到: editor.textInput.getElement()
猜你喜欢
  • 2017-05-22
  • 2013-11-07
  • 2013-11-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多