D3中的脚本.js使Chrome崩溃
Script in D3.js make Chrome crash
我用 JavaScript 编写了这段代码,使用 D3 为网站制作动画,类似于"原子样"的核心。最终效果它与我非常相似,但每次我尝试用 chrome 打开它时,它都会崩溃。
我很确定问题出在"翻译"功能上。有什么想法吗?
这是脚本核心,它通常会在一段时间后崩溃,只需要等待。
你有什么想法吗?谢谢!
编辑:火狐不会崩溃。
<!DOCTYPE html>
<meta charset="utf-8">
<body>
<script src="d3.v3.min.js"></script>
<script>
var divWidth = window.innerWidth - 25;
var divHeight = window.innerHeight - 25;
var svg = d3.select("body").append("svg")
.style("background-color", "#000000")
.attr("width", divWidth)
.attr("height", divHeight);
var sampleData=new Array();
var lineFunction = d3.svg.line()
.x(function(d) { return d.x; })
.y(function(d) { return d.y; })
.interpolate("basis-closed");
sampleData = [];
var r = 40;
var count = 0;
var n = 8;
var paths= new Array();
for(var i=0;i<n;i++)
{
paths[i] = svg.append("path")
.attr("stroke", "white")
.attr("stroke-width", 1)
.attr("fill", "none");
}
var xapp,yapp;
setInterval(function()
{
for(var j=0;j<n;j++)
{
sampleData = [];
for(var i=0;i<5;i++)
{
xapp = (divWidth/2 + Math.cos((i*(2*Math.PI/10)))*r)+Math.random()*r*2-r;
yapp = (divHeight/2 + Math.sin((i*(2*Math.PI/10)))*r)+Math.random()*r*2-r;
sampleData[i] = [xapp,yapp];
}
paths[j]
.data([sampleData])
.transition()
.duration(300)
.ease("linear")
.attr("d", d3.svg.line()
.interpolate("basis-closed"));
}
}, 200);
setInterval(function()
{
for(var i=0;i<n;i++)
{
svg.append("circle")
.attr("r", 2)
.style("fill","white")
.style("stroke","white")
.transition()
.duration(2000)
.ease("linear")
.attrTween("transform",translateAlong(paths[i].node()))
.each("end", function() {
d3.select(this).remove(); })
}
}, 300);
function translateAlong(path) {
var l = path.getTotalLength();
return function(d, i, a) {
return function(t) {
var p = path.getPointAtLength(t * l);
return "translate(" + p.x + "," + p.y + ")";
};
};
}
</script>
你创建新元素的速度比摧毁旧元素的速度快!
检查您的代码。您的间隔每 300 毫秒触发一次circle
元素创建,而圆圈仅在完成 2000 毫秒长的过渡时才会被删除。因此,在删除现有圆圈时,至少会创建 6 个新圆圈。
这是一个演示来证明这一观察结果。
刚刚更改了第二个setInterval
(创建圆圈)的milliseconds
,然后自己看看。确保此值大于或等于transition().duration
值。
另外,一个友好的提示:考虑使用d3 enter
,update
,exit
技术。这将帮助您在很大程度上避免过时的for
循环。
相关文章:
- Chrome在尝试从Javascript修改CSS3动画时崩溃
- Javascript正则表达式文件类型崩溃chrome
- 使用SoundJS离开网页会导致Google Chrome崩溃
- 如果我刷新几次,为什么我的应用程序会在Chrome中崩溃
- 使用 for 循环用整数序列填充数组,而不会使 Chrome 崩溃
- JavaScript 冻结/崩溃在 Chrome 中
- 如果 Chrome 扩展程序崩溃,如何让另一个扩展程序重新加载崩溃的扩展程序
- Chrome 在执行正则表达式匹配时崩溃
- JavaScript SetTimeOut永远不会触发函数并使Chrome崩溃
- D3中的脚本.js使Chrome崩溃
- chrome崩溃与javascript中java的方法调用
- SVG中的弯曲文本会使Chrome崩溃
- URI过长时Chrome崩溃
- Chrome崩溃与这个JS
- 缓存上传文件会导致chrome崩溃
- chrome崩溃,而设置弹出窗口.innerHTML = largeString
- 我如何运行一个繁重的cpu和内存HTML/javascript程序?(firefox、chrome崩溃)
- Javascript:导出大的text.csv文件会导致Google Chrome崩溃
- HTML5文件API在使用readAsDataURL加载所选图像时导致Chrome崩溃
- Openlayers 3在pointermove处理程序中使用调试器导致chrome崩溃