2014-03-12 39 views
4

将CSS比例变换应用于元素时,是否可以将“起始”值设置为当前比例?当前值的纯CSS变换比例

例如,考虑用于将单独的增长和收缩动画以下2个CSS关键帧转换:

@-webkit-keyframes grow 
{ 
    from { -webkit-transform: scale(0,0); } 
    to { -webkit-transform: scale(1,1); } 
} 

@-webkit-keyframes shrink 
{ 
    from { -webkit-transform: scale(1,1); } 
    to { -webkit-transform: scale(0,0); } 
} 

这将成功地缩放它施加到元件,但总是从0到1(或副反之亦然)。如果缩减关键帧在增长关键帧已经完成之前获得应用,它具有在转换开始之前将比例“跳跃”到0的效果。

你可以看到在这个jsFiddle showing CSS scale transform on mouseover

注意这个效果,如果你将鼠标放在黑色的正方形,然后迅速鼠标移出,尺度变换并不顺利。

什么,我基本上是后类似如下:

@-webkit-keyframes grow 
{ 
    from { -webkit-transform: CURRENT_SCALE; } 
    to { -webkit-transform: scale(1,1); } 
} 
+0

不可能单独使用CSS(AFAIK)。 http://css-tricks.com/controlling-css-animations-transitions-javascript/描述了一些通过JavaScript获取当前值的技术,也许你可以适应这一点。 – CBroe

+0

这确实可以使用转换而不是动画。请参阅http://jsfiddle.net/G6wME/2/ - 从@enguerranws js小提琴下面分叉。 – nickspiel

回答

2

动画使该元素从0%比例达到100%,规模上悬停,然后从100%鼠标移开时至0%的规模。

我认为在这种情况下,该解决方案可以根据其起点是设置元素的基本尺度:

#output 
{ 
    width: 200px; 
    height: 200px; 
    border-radius: 50%; 
    background: #FF0000; 
    display: inline-block; 
    -ms-transform: scale(0,0); 
    transform: scale(0,0); 
    -webkit-transform: scale(0,0); 
} 

在这种情况下,我会harldy使用纯CSS解决方案建议使用过渡:悬停:http://jsfiddle.net/bg6aj/21/

你不会有任何 “跳楼” 的效果:

#output 
{ 
    width: 200px; 
    height: 200px; 
    border-radius: 50%; 
    background: #FF0000; 
    display: block; 
    -ms-transform: scale(0,0); 
    transform: scale(0,0); 
    -webkit-transform: scale(0,0); 
    transition: all .2s; 
    -webkit-transition: all .2s; 
} 

#touchPad:hover + #output { 
    -ms-transform: scale(1,1); 
    transform: scale(1,1); 
    -webkit-transform: scale(1,1); 
} 

此时,您将没有更多的跳跃效果。 然后:我们可以这样做:

@-webkit-keyframes grow 
{ 
    from { -webkit-transform: scale(0,0); } 
    to { -webkit-transform: scale(1,1); } 
} 

答:很简单:

@-webkit-keyframes grow 
{ 
    0% { -webkit-transform: scale(1,1); } 
    50% { -webkit-transform: scale(0,0); } 
    100% { -webkit-transform: scale(1,1); } 
} 

这意味着:把我的元素(如规模默认为100%),0%,规模在使其50%的动画,并将其恢复为100%。试图设置像current_scale这样的东西没有任何意义。

考虑到这一点,我一定会选择Transition解决方案。

+0

这似乎并未解决所有解决方案 - 所提议的代码将简单地将元素设置为初始0比例状态,但不会更改任何实际的变换行为。 – duncanhall

+1

如果您使用CSS转换,您将不会有任何跳跃效果,这是您问题的一部分。让我想想另一部分。 – enguerranws

+0

您是否尝试过类似以下内容:@ -webkit-keyframes grow { 0%{-webkit-transform:scale(1,1); } 50%{-webkit-transform:scale(0,0); } 100%{-webkit-transform:scale(1,1); } }? (更新我的回答) – enguerranws