解决css转盘游戏中transform:rotate不能多次转动问题
用css的transform属性实现的转盘游戏,都是让元素转动指定的角度来实现抽奖的目的。
假如我们的转盘被分成了八份,每一份就是45度,如下图:
当我们要抽中某一个时,一般都会把指针指向扇形的中间,所以如果要指向第一个扇形的中间,就是转动22.5度,在上图,我们用指针的逆时针转动,来解释转盘的顺时针转动。要指向其它的扇形就是再依次增加45度。但是这样每次转盘的转动都不会超过一圈,对于一个抽奖游戏来说,可能效果不太好。所以我们随机出某个奖品时,算出要转多少度,会再给这个度数加上360的整数倍,这样不影响结果,并且可以让转盘转动好多圈,看起来效果逼真,更像实物转盘。
这样实现本来没有什么不妥,但是,当转盘转动第二次的时候,转动的幅度就又被限制在一圈之内了。这要从transfor:rotate的工作原理说起。
由于每次totate转动都是相对于0度转动,但是实际浏览器渲染的时候,为了性能只会渲染一个相对度数。
比如,第一次转动180度,第二次转动190度,那么实际会在第一次的基础上转动10度,这对于一个转盘游戏是不可取的。这就可以解释为什么我每次都加了360度的整数倍,还是被限制在一圈的转动之内,因为我每次加的都是固定的值,比如每次都加360度的十倍,那么第二次的转动在第一次的基础上转动度数差,十倍就被抵消了。
想了两个解决方案: