javascript - 旋转图像的 SVG 低性能

标签 javascript html google-chrome svg d3.js

我正在 D3.js 中构建一个应用程序,我将多个索引卡 (svg) 渲染为一个 SVG。用户应该能够旋转这些卡片。出于测试目的,我使用拖动行为进行旋转

dragListener = d3.behavior.drag().on("dragstart", function(d){
        originX = parseInt(d3.select(this).select("image").attr("x"));
        originY = parseInt(d3.select(this).select("image").attr("y"));
    })
    .on("drag", function(d){
        counter++;
        if(counter > 360){
            counter = 0;
        }
        d3.select(this).attr("transform", 
            "rotate("+counter.toString()+","+(originX+150).toString()+","+(originY+90).toString()+")");
    });

我提供给所有索引卡

var grp = svg.selectAll("g").data(arr);
var card = 
       grp.enter().append("g")
     //.attr("transform", function(d){ return "rotate(30,"+(d.x+150)+","+(d.y+90)+")";})
       .call(dragListener);
card.append("svg:image")
    .attr("xlink:href", "http://images.clipartlogo.com/files/images/22/227702/index-card_p")
    .attr("x", function(d){return d.x;})
    .attr("y", function(d){return d.y;})
    .attr("width", "300")
    .attr("height", "180");

问题是,已经旋转的卡片越多,用户旋转卡片时的性能就越低。当所有卡片旋转时,Chrome 中的 FPS 约为 8。
这是示例:http://jsfiddle.net/45hdjkk0/6/
您可以通过删除第 32 行中的评论来为所有卡片提供初始轮换。

我是做错了什么还是选择了错误的方法?

更新: 在 Internet Explorer 和 Firefox 上测试相同的示例后,我发现 Internet Explorer 是这三个中最快的。与 Chrome 相比,Firefox 也非常快。这是 Chrome 的问题吗?

最佳答案

旋转任何位图的计算量很大。我在 Firefox 和 Chrome 中运行了你的 fiddle 。虽然 Firefox 还不错,但我确实看到你提到的 Chrome 中的一些帧速率下降。一定要是png可能没有好的解决办法。如果它不一定是 png,旋转由组合图形元素组成的 svg 将获得出色的性能。

编辑:看起来您确实想要旋转索引卡,所以我认为您很幸运。为了说明我在说什么,请注释掉第 36 行,然后取消注释第 32 行。然后查看没有位图的旋转性能。然后只需添加几行 .attr("path", ...) 即可重现您的索引卡,我敢打赌性能会很出色。

关于javascript - 旋转图像的 SVG 低性能,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28792925/

相关文章:

javascript - Vanilla JavaScript 中的轮播 - 滑动所有图片而不是一张

javascript - React.js 和具有动态宽度的水平 IScroll 5

php - 从 blender 导出的 .X3D 文件具有黑色背景,我无法更改

javascript - 在 html 中添加 anchor 标记和潜在的 javascript 干扰问题

JavaScript 和 HTML 正则表达式不工作

javascript - GTM : collect coordinates (x, y) 来自事件

javascript - 如何将 Google 电子表格中的多个单元格中的文本提取到网站上,每个单元格中的每个单元格都位于不同的 <p> 标记中?

javascript - 根据 Google Maps API v3 中的地理位置精度设置缩放级别

google-chrome - 这个页面在 Chrome 和 Opera 中有什么问题?

javascript - 从 .split() 生成的 Google Chrome 困惑数组