【发布时间】:2016-12-10 13:04:39
【问题描述】:
我有这样的代码使用 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里面 在我水平调整浏览器窗口的大小之前,这些线条不会显示。 当我将刷新放入 setTimeout 0 时它起作用:
setTimeout(function() {
term.flush();
}, 0);
当我在本地服务器上运行相同的代码(没有 setTimeout)时,它可以正常工作。我还尝试将代码嵌入 iframe 中,它也按预期运行。当我执行命令 show (键入 show 并按 enter)时,执行的命令和提示会添加到末尾(在 echo 添加的行之后),但是当我调整窗口大小时,它们应该放在行之前。
有人知道为什么会这样吗?为什么代码在本地和codepen中执行的不同?
我已经尝试在 jquery.terminal-src.js 文件中设置断点,但没有弄清楚为什么刷新不显示行。当我单步执行代码时,调用 flush 时 output_buffer 数组似乎是空的,但是当我调整窗口大小并执行 resize 方法时,这些行会以某种方式出现。
【问题讨论】:
-
看起来如果您在
echo调用中将flush: false更改为flush: true,就会显示这些行... -
@MikeMcCaughan 是的,但它会调用flush,浏览器会在每次回显后重新绘制,我想要一次刷新一次重新绘制。
标签: javascript jquery jquery-terminal codepen