gpt4 book ai didi

javascript - 网页中的计时器与 phantomjs 中的时间同步

转载 作者:行者123 更新时间:2023-11-28 08:01:36 24 4
gpt4 key购买 nike

我有一个关于 phantomjs 和计时器的问题。网页中的计时器似乎与 pahntomjs 中的时间同步,因此您无法创建漂亮的 gif 来显示漂亮的网站动画(动画总是使用时间)。

这是说明问题的代码:

test.phantom.js

var page = new WebPage();
page.open("test.html", function(){
var i = 0
setInterval(function(){
page.render('test-capture/'+i+'.gif', {format : "gif"});
i++;
if(i == 20)
phantom.exit();
}, 20);
});

test.html

<!doctype html>
<html>
<script>
var div;
window.onload = function(){
div = document.getElementById("t");
var times = 0;
setInterval(function(){
div.innerHTML = "" + (++times);
}, 1)
}
</script>

<body>
<div id="t">
0
</div>
</body>
</html>

如您所见,phantomjs 每 20 毫秒触发一次渲染调用,而网页每毫秒更改 div#t 的内容。您可能期望在生成的 20 张图像中,div#t 的内容将以 20 为步长进行更改,但这种情况并未发生。我没有足够的声誉来发布图像,但 div#t 中的内容正在以 1 毫秒的步长变化。

这是一个错误还是应该这样发生?提前致谢。

最佳答案

发生这种情况是因为即使您拥有页面上下文和外部上下文,JavaScript 执行也是单线程的。第二件事是渲染(gif)并不便宜。在我的机器上,渲染 gif 平均需要大约 100 毫秒。在此期间,无法执行任何 JavaScript,时间静止。

因此,当渲染完成后,两个计时器都可以继续运行。所以公式是:

var pageContextAdvancement = Math.max(outsideIntervalDuration - timeToRender, 1);

所以,不,不可能用 PhantomJS 来制作动画。它只是不是正确的工具。

<小时/>

至少在我的机器上,以下内容似乎有效,但如果工作负载发生变化,这可能会改变。

page.open("test.html", function(){
var i = 0
function run(){
page.render('test/'+i+'.gif', {format : "gif"});
i++;
if(i == 20)
phantom.exit();
setTimeout(run, 200);
}
setTimeout(run, 170);
});

关于javascript - 网页中的计时器与 phantomjs 中的时间同步,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25324846/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com