html - 使用 SVG HTML CSS 的高效连续滚动图

标签 html css svg css-transitions svg-animate

我创建了一个实时图表,其中不断输入和绘制新数据点。

目前我正在使用 requestAnimationFame(),我每秒渲染元素的更新位置 30 次。

对于许多 SVG 元素,这可能会有点慢。

用 SVG 动画、CSS 动画或 CSS 过渡实现像这样的连续滚动图形的最有效方法是什么。 (没有第 3 方库)。

提前致谢。

最佳答案

Fiddle 中有一个很好的解决方案.

来自 Mike Bostock 和他关于使用 D3 的精彩教程.在那个教程中; Mike 解释了如何从头开始完成 Fiddle,但对您来说重要的部分是 redraw 函数:

function redraw() {

     var rect = chart.selectAll("rect")
         .data(data, function (d) {
         return d.time;
     });

     rect.enter().insert("rect", "line")
         .attr("x", function (d, i) {
         return x(i + 1) - .5;
     })
         .attr("y", function (d) {
         return h - y(d.value) - .5;
     })
         .attr("width", w)
         .attr("height", function (d) {
         return y(d.value);
     })
         .transition()
         .duration(1000)
         .attr("x", function (d, i) {
         return x(i) - .5;
     });

     rect.transition()
         .duration(1000)
         .attr("x", function (d, i) {
         return x(i) - .5;
     });

     rect.exit().transition()
         .duration(1000)
         .attr("x", function (d, i) {
         return x(i - 1) - .5;
     })
         .remove();

 } 

它将根据传入的数据添加一个新的矩形并淡出最旧的矩形,从而创建您想要的滚动 Action 。这应该很容易适应您的需求,但它确实假设了固定数量的矩形。

根据您的问题,您似乎希望在任何给定时间在屏幕上显示不受限制的矩形数量,但最终这是不可取的。您可以将要显示的矩形数量设置为仍然允许您的网站保持高性能的最大数量。再这样下去,你和你的用户都会崩溃。当 svg 计数足够高时,一个一个淡入淡出比持续加载更有效。

关于html - 使用 SVG HTML CSS 的高效连续滚动图,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20257159/

相关文章:

python - 如何修复django模板中的html代码

javascript - 将 html 表格导出为 word 文件并更改文件方向

javascript - 如何在模态 Bootstrap 中发送参数?

css - 定位 div 中的两个元素而不重复父类

javascript - 按顺序执行点击处理程序,仅在执行操作后呈现元素

jquery - 如何使用 CSS canvas 绘制幻灯片框架?

html - 在 parent 提供的高度内第一个 child 之前的空白

html - 鼠标悬停时更改 SVG 剪贴蒙版的大小

html - 如何将嵌入的 SVG 文件居中?

svg - Circle-packing diagram - 两组值之间的转换