正如你在这个页面上看到的:http://www.gigil.it/newroot/index.php//come-doniamo
我用快照SVG完成了一些svg动画。当元素位于视口中时,将触发动画。它基本上在SVG内的所有路径上做相同的动画。
这是脚本:
jQuery(window).scroll(function() {
jQuery(".icon-come-doniamo").each(function(){
//console.log($(this));
if (jQuery(this).isOnScreen() == true) {
if (!jQuery(this).hasClass("already-visible")){
var $that = jQuery(this);
setTimeout(function(){
//jQuery(this).addClass("already-visible");
var Elemento = $that.find("svg");
var iconSnap = Snap("#"+Elemento.attr("id"));
var iconPaths = iconSnap.selectAll("path");
var delays = 0;
var count = 0;
iconPaths.forEach(function(elem,i) {
setTimeout(function(){
//console.log("gegge");
var elemDim = elem.getBBox();
elem.animate({transform: 'r0,' + elemDim.cx + ',' + elemDim.cy + 's1,1' }, 700, mina.linear );
}, delays);
delays = delays + 400;
count = count + 1;
});
if (count == iconPaths.length) {
//console.log("fattgegge");
$that.addClass("already-visible");
}
},1000);
}
}
});
});
我认为很简单,但很多时候 FPS 变得非常低,动画变得非常笨重。我尝试了任何东西,但没有大的改变。有什么提示吗?
通过删除边界框计算解决了这个问题。删除了旋转属性。
现在它顺利多了。
由此:
elem.animate({transform: 'r0,' + elemDim.cx + ',' + elemDim.cy + 's1,1' }, 700, mina.linear );
对此:
elem.animate({transform: 's1,1' }, 700, mina.linear );