GreenSock TimelineMax路径元素在Safari和Firefox中不起作用

时间:2016-08-18 12:29:37

标签: javascript animation svg tweenmax timelinemax

我正在尝试动画我在JavaScript / jQuery中创建和追加的几个路径元素。然后我使用时间轴逐个动画这些元素(具有不同的值,所以我不能使用交错)。最后,我不想播放完整的时间表,而只是它的一部分。

这在Chrome中运行得很好但在Safari和Firefox中没有,我无法弄清楚原因。

这是一个CodePen: http://codepen.io/elisabeth_hamel/pen/kXqOmw

编辑: CodePen已更新,现在正在运行。

以下是代码:

HTML

<svg xmlns='http://www.w3.org/2000/svg' width='20' height='10' viewBox='0 0 2 1' preserveAspectRatio='xMinYMid meet'></svg>

CSS

svg{
    width: 100%;
    position: absolute;
    top: 0;
    bottom: 0;
    left: 60px;
    margin: auto;
    overflow: visible;
    z-index: 1;
    .up{
        -webkit-transform: translate3d(0, 40px, 0);
        transform: translate3d(0, 40px, 0);
    }
    .down{
        -webkit-transform: translate3d(0, 40px, 0);
        transform: translate3d(0, -40px, 0);
    }
}

JS

$(function(){
    var trianglesTimeline = new TimelineMax({paused: true, smoothChildTiming: true});

    function setAnimations(){
        var nbTriangles, i = 0, svg = '', random = 1, thisPath;

        nbTriangles = ($(window).width() - 60)/9 | 0;
        for(i; i<nbTriangles; i++){
            random = (Math.random()*(2.5-0.5) + 0.5).toFixed(1);
            if(i%2 === 0){
                svg += "<path fill='#000' d='M0 0H2 L1 1Z' class='down' data-op='"+random+"' data-x='"+i+"' style='opacity:0'/>";
            }else{
                svg += "<path fill='#000' d='M0 1H2 L1 0Z' class='up' data-op='"+random+"' data-x='"+i+"' style='opacity:0'/>";
            }
        }
        $('svg').html(svg);

        i = 0;
        for(i; i<nbTriangles; i++){
            thisPath = $('path').eq(i);
            TweenMax.set(thisPath, {x: thisPath.data('x')}, 0);
            trianglesTimeline.to(thisPath, 0.3, {opacity: thisPath.data('op'), y: '0px', delay: 0.04*i}, 0);
        }
        trianglesTimeline.tweenTo( trianglesTimeline.duration() * 0.1 );
    }

    setAnimations();
});

任何帮助将不胜感激!

1 个答案:

答案 0 :(得分:0)

好的,结果是CSS规则转换规则覆盖了路径元素上TweenMax设置的转换。我不明白为什么!

所以我用内联变换替换了类。如果有兴趣的话,这是新的工作代码:

CSS

id_a

JS

svg{
    width: 100%;
    position: absolute;
    top: 0;
    bottom: 0;
    left: 60px;
    margin: auto;
    overflow: visible;
    z-index: 1;
}

修改

为了使它在IE中运行,我做了一些其他修改:

$(function(){

    var trianglesTimeline = new TimelineMax({paused: true, smoothChildTiming: true});

    function setAnimations(){
        var nbTriangles, i = 0, svg = '', random = 1, thisPath;

        nbTriangles = ($(window).width() - 60)/9 | 0;
        for(i; i<nbTriangles; i++){
            random = (Math.random()*(2.5-0.5) + 0.5).toFixed(1);
            if(i%2 === 0){
                svg += "<path fill='#000' d='M0 0H2 L1 1Z' transform='translate("+i+", 40)' data-op='"+random+"' style='opacity:0'/>";
            }else{
                svg += "<path fill='#000' d='M0 1H2 L1 0Z' transform='translate("+i+", -40)' data-op='"+random+"' style='opacity:0'/>";
            }
        }
        $('svg').html(svg);

        i = 0;
        for(i; i<nbTriangles; i++){
            thisPath = $('path').eq(i);
            trianglesTimeline.to(thisPath, 0.3, {opacity: thisPath.data('op'), y: '0px', delay: 0.04*i}, 0);
        }
        trianglesTimeline.tweenTo( trianglesTimeline.duration() * 0.1 );
    }

    setAnimations();
 });