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)
终于搞定了:
editor.getSession().on('changeScrollTop', function(scroll) {
editor2.getSession().setScrollTop(parseInt(scroll) || 0)
});
Run Code Online (Sandbox Code Playgroud)
您可以在CodePen上看到一个有效的演示