无法在Ace Editor中滚动和突出显示代码

时间:2014-07-18 12:26:53

标签: javascript jquery html css ace-editor

在这个社区的帮助下,我能够使我的ace编辑器达到最高位置,因此当用户输入或修改它时,编辑器会随代码一起增长。我最近意识到这可以防止用户尝试突出显示代码。当你开始突出显示代码并在到达窗口底部时开始向下拖动它停止,它不会像你期望的那样向下滚动窗口。

这是我用来使编辑器达到全高的代码。指向JSFiddle的链接在

下面
var editor = ace.edit("editor-html");

setEditorOptions(editor, 'html');

setTimeout(function() {
    heightUpdateFunction();
}, 100);    

function setEditorOptions(editor, type) {
    editor.setShowPrintMargin(false);
    editor.setTheme("ace/theme/clouds");
    editor.getSession().setMode("ace/mode/"+type);
    editor.getSession().on('change', heightUpdateFunction);
}
function heightUpdateFunction() {
    var newHeight = (editor.getSession().getScreenLength() + 1) * editor.renderer.lineHeight + editor.renderer.scrollBar.getWidth();
    $('#editor-html').css('height', newHeight.toString() + "px");
    editor.resize();

    if (newHeight <= 1) {   
        setTimeout(function() {
            heightUpdateFunction();
        }, 100);    
    }
}

我上传了一个示例来尝试jsfiddle.net

当用户尝试高亮显示文本时,有没有办法修复滚动?

2 个答案:

答案 0 :(得分:3)

您应该使用maxLinesautoScrollEditorIntoView选项。像这样:

var editor = ace.edit("editor-html");
editor.setOptions({
    maxLines: 1000,
    autoScrollEditorIntoView: true,
    theme: "ace/theme/clouds",
    showPrintMargin: false,
    mode: "ace/mode/html"
})

请参阅https://github.com/ajaxorg/ace/blob/master/demo/autoresize.html#L39

请注意,当heightUpdateFunction选项尚未提供时,建议使用maxLines,但效果不佳。您应该使用maxLines代替它。

答案 1 :(得分:0)

如果将scrollSpeed设置为零,也会发生。

editor.setScrollSpeed(0); // no scrolling

editor.setScrollSpeed(.5); // scrolling

我曾使用integer来存储scrollSpeed值,当我传递.5时,它被转换为0,因为integers只能是整数而且这个禁用滚动。我切换到使用允许小数的Numberfloat并重新开始滚动。