transform:scale(x,x)不适用于Firefox中的动画

时间:2014-03-19 10:24:02

标签: jquery jquery-ui css3 firefox transform

我正在尝试使用滑块在Firefox中“转换:缩放(x,x)”css3“动画”。如果我关闭动画,滑块和缩放工作。如果我打开动画,它会动画,但缩放不起作用。

这是我的jsfiddle ...如果你取消注释CSS的结尾,你可以看到问题。我希望箭头旋转并缩放。

(仅限FIREFOX,下面的chrome / safari链接):http://jsfiddle.net/G6rYu/

$("#slider-step").on("change", function(e){
    scale= $("#slider-step").val() / 100;

    $(".elem.A").css("transform", "scale("+scale+","+scale+")");
    $(".elem.B").css("transform", "scale("+(1-scale)+","+(1-scale)+")");
});

和...

.elem.A {  
    background-image:url('http://s24.postimg.org/ua9mzwmht/arrow.png');

    animation-name: rotate; 
    animation-duration: 3.0s; 
    animation-iteration-count: infinite;
    animation-timing-function: linear;
 }
 @keyframes rotate {
    from {transform: rotate(0deg);}
    to {transform: rotate(-360deg);} 
}

以下是我想要的效果(仅适用于Chrome / Safari):http://jsfiddle.net/nick2ny/4mLkU/

2 个答案:

答案 0 :(得分:4)

它仅适用于WebKit浏览器,因为您要告诉CSS目标,例如:

-webkit-animation-name: rotate; 
-webkit-animation-duration: 3.0s; 
-webkit-animation-iteration-count: infinite;
-webkit-animation-timing-function: linear;

Firefox不是使用WebKit引擎构建的,因此您需要使用-moz前缀来定位它:

/* Target Firefox: */
-moz-animation-name: rotate; 
-moz-animation-duration: 3.0s; 
-moz-animation-iteration-count: infinite;
-moz-animation-timing-function: linear;

/* Target Webkit: */
-webkit-animation-name: rotate; 
-webkit-animation-duration: 3.0s; 
-webkit-animation-iteration-count: infinite;
-webkit-animation-timing-function: linear;

/* Target W3C Browsers: */
animation-name: rotate; 
animation-duration: 3.0s; 
animation-iteration-count: infinite;
animation-timing-function: linear;

答案 1 :(得分:1)

我认为在.elem元素上使用转换两次存在冲突。动画transform: rotate()将覆盖transform: scale()。您可以使用包装器元素进行缩放,并将动画应用于内部元素。

您似乎在Chrome中使用zoom,这可以解释它在该浏览器中的工作原理。

请看这个小提琴: http://jsfiddle.net/G6rYu/5/ (适用于Firefox和Chrome)

<div class="wrap">
    <div class="box A">
        <div class="elem A"></div>
    </div>
</div>
<div class="wrap">
    <div class="box B">
        <div class="elem B"></div>
    </div>
</div>

CSS

.wrap {
    width: 175px;
    height: 175px;
    overflow: hidden;
}
.box.A {
    width:175px;
    /* border:1px blue solid; */
}
.box.B {
    position:relative;
    top:0px;
    left:0px;
    float:left;
    height: 175px;
    width:175px;
    /* border:1px blue solid; */
}
.elem {
    width:175px;
    height:175px;
    /* border:1px red solid; */
    background-repeat: no-repeat;
}
.elem.A {
    background-image:url('http://s24.postimg.org/ua9mzwmht/arrow.png');
}
.box.A {
    animation-name: rotate;
    animation-duration: 3.0s;
    animation-iteration-count: infinite;
    animation-timing-function: linear;
}
@keyframes rotate {
    from {
        transform: rotate(0deg);
    }
    to {
        transform: rotate(-360deg);
    }
}
.elem.B {
    background-image:url('http://s29.postimg.org/np8utnv8j/arrow2.png');
}
.box.B {
    animation-name: rotate2;
    animation-duration: 3.0s;
    animation-iteration-count: infinite;
    animation-timing-function: linear;
}
@keyframes rotate2 {
    from {
        transform: rotate(0deg);
    }
    to {
        transform: rotate(360deg);
    }
}