Ace Editor同步滚动

Dan*_*nes 2 jquery synchronizing vertical-scrolling ace-editor

我有两个同时运行的Ace编辑器会话,我正在尝试同步两个编辑器的垂直滚动.我找到了一个简单的jQuery方法,可以使用普通的Div,但是我怎样才能使它适应Ace?

jQuery方法:

$("#editor1").scroll(function () { 
    $("#editor2").scrollTop($("#editor1").scrollTop());
    $("#editor2").scrollLeft($("#editor1").scrollLeft());
});

$("#editor2").scroll(function () { 
    $("#editor1").scrollTop($("#editor2").scrollTop());
    $("#editor1").scrollLeft($("#editor2").scrollLeft());
});
Run Code Online (Sandbox Code Playgroud)

显然,上述方法不适用于Ace.我一直在寻找Ace API:Virtual Renderer的解决方案,但我甚至无法在编辑器上滚动时设置任何回调函数.

API Here中有对滚动条的引用,但似乎无法做任何事情.我试过像这样测试它...

editor.ScrollBar.on('scroll', function() {
    alert('Callback?');
});
Run Code Online (Sandbox Code Playgroud)

有人可以帮我这个吗?:) 谢谢.

编辑

下面的解决方案确实有效,但(在我的情况下)它几乎立即崩溃浏览器(Chrome).我在它上面设置了一个超时功能,以限制它可以多快发射,但它仍然不可避免地崩溃.想法?

editor.getSession().on('changeScrollTop', function(scroll) {
    setTimeout(function() {
        editor2.getSession().setScrollTop(scroll);
    }, 1000);
});
Run Code Online (Sandbox Code Playgroud)

ByS*_*pts 6

信息:我为滚动到顶部时发生的崩溃添加了一种解决方法

终于搞定了:

editor.getSession().on('changeScrollTop', function(scroll) {
  editor2.getSession().setScrollTop(parseInt(scroll) || 0)
});
Run Code Online (Sandbox Code Playgroud)

您可以在CodePen上看到一个有效的演示