我使用 jQuery 终端有这样的代码:
function show() {
for (var i = 0; i < 100; ++i) {
this.echo('line ' + i, {
flush: false
});
}
this.flush();
setTimeout(function() {
//this.flush();
}, 0);
}
var term = $('body').terminal({
show: show
}, {
onBlur: function() {
return false;
},
onInit: function(term) {
show.apply(term);
}
});
在这个codepen 中,直到我水平调整浏览器窗口的大小,这些行才会显示出来。当我将flush放入setTimeout 0时它起作用:
setTimeout(function() {
term.flush();
}, 0);
当我在本地服务器上运行相同的代码(没有 setTimeout)时,它可以正常工作。我还尝试将代码嵌入 iframe 中,它也按预期运行。当我执行命令 show (键入 show 并按 enter)时,执行的命令和提示会添加到末尾(在 echo 添加的行之后),但是当我调整窗口大小时,它们应该放在行之前。
有人知道为什么会这样吗?为什么代码在本地和在 codepen 中执行的方式不同?
我已经尝试在 jquery.terminal-src.js 文件中设置断点,但没有弄清楚为什么刷新不显示行。当我单步执行代码时,调用 flush 时 output_buffer 数组似乎是空的,但是当我调整窗口大小并执行调整大小方法时,这些行会以某种方式出现。