dit*_*tto 11 css animation css3 css-animations
我希望在数字快速变化时获得动画效果,例如:http://jsbin.com/kevalutupe/1/
我想单独使用这个CSS(我知道如何在JS中编写代码),我不想使用JS,因为我觉得锤击DOM并不是最好的解决方案.这完全可以用CSS吗?
我并没有对正确递增的数字感到困惑,我只是在效果之后.
Har*_*rry 29
使用CSS3动画绝对可以实现数字旋转效果,你还可以使用一小部分JS来设置终点并实际获得整个功能.
方法说明:
div创建A时,通过将其高度和宽度设置为1em,它始终只显示一个数字.将溢出div设置为隐藏,以便只显示一行.div创建span包含从1到0的所有数字,并相对于父项定位.span0px或0em,但在animation顶部位置发生变化时,会span产生向上移动的印象.因为一次div只能显示一个数字,所以它会产生旋转效果(或其他数字的效果消失).span元素设置固定的顶部位置来实现最终位置.0em表示第1行可见(编号1),-2em表示第3行可见(编号3),依此类推.注意:使用这种方法,旋转看起来像每次都是整个圆圈而不是像所讨论的JSBin样本那样,第一个数字的3到4只是一个步骤,而不是一个完整的圆圈.
div {
width: 1em;
height: 1em;
overflow: hidden;
line-height: 1em;
display: inline-block;
}
span {
position: relative;
}
.animate {
-webkit-animation: spinit 0.2s 5;
-moz-animation: spinit 0.2s 5;
animation: spinit 0.2s 5;
}
@-webkit-keyframes spinit {
0% {
top: 0em;
}
50% {
top: -5em;
}
100% {
top: -9em;
}
}
@-moz-keyframes spinit {
0% {
top: 0em;
}
50% {
top: -5em;
}
100% {
top: -9em;
}
}
@keyframes spinit {
0% {
top: 0em;
}
50% {
top: -5em;
}
100% {
top: -9em;
}
}
/* Setting the required value to top will make the spinner end at that number */
#digit1 {
top: -4em;
/* -4em means 5 will be the number */
}
#digit2 {
top: -2em;
}
#digit3 {
top: 0em;
}Run Code Online (Sandbox Code Playgroud)
<div>
<span class="animate" id='digit1'>1 2 3 4 5 6 7 8 9 0</span>
</div>
<div>
<span class="animate" id='digit2'>1 2 3 4 5 6 7 8 9 0</span>
</div>
<div>
<span class="animate" id='digit3'>1 2 3 4 5 6 7 8 9 0</span>
</div>Run Code Online (Sandbox Code Playgroud)
下面是一个使用JavaScript的示例,其中动画效果是通过CSS实现的,但动画的触发和端点的设置是使用JavaScript实现的.
JS代码几乎是自我解释的.我们所做的就是以下内容:
animate类添加到span属于此动画效果的所有元素.这是因为我们希望动画仅在单击按钮时发生.top每个属性设置span为一些随机数.这意味着每个跨度将显示不同的数字.animate类,这样当我们再次单击该按钮时,动画可以重新开始.window.onload = function() {
var spinner = document.getElementById('spinner');
spinner.onclick = spinit;
var el = document.querySelectorAll("span[id*=digit]");
for (i = 0; i < el.length; i++) {
el[i].addEventListener("animationend", randomize, false);
el[i].addEventListener("webkitAnimationEnd", randomize, false);
el[i].addEventListener("oanimationend", randomize, false);
el[i].addEventListener("MSAnimationEnd", randomize, false);
}
}
function randomize() {
var rand = Math.floor(Math.random() * 9);
this.style.top = -1 * rand + "em";
this.classList.toggle('animate');
}
function spinit() {
var el = document.querySelectorAll("span[id*=digit]");
for (i = 0; i < el.length; i++) {
el[i].classList.toggle('animate');
}
}Run Code Online (Sandbox Code Playgroud)
div {
width: 1em;
height: 1em;
overflow: hidden;
line-height: 1em;
display: inline-block;
}
span {
position: relative;
}
.animate {
-webkit-animation: spinit 0.2s 5;
-moz-animation: spinit 0.2s 5;
animation: spinit 0.2s 5;
}
@-webkit-keyframes spinit {
0% {
top: 0em;
}
50% {
top: -5em;
}
100% {
top: -9em;
}
}
@-moz-keyframes spinit {
0% {
top: 0em;
}
50% {
top: -5em;
}
100% {
top: -9em;
}
}
@keyframes spinit {
0% {
top: 0em;
}
50% {
top: -5em;
}
100% {
top: -9em;
}
}
/* Set the value according to the on-load position of the spinner */
#digit1 {
top: -4em;
/* -4em means 5 will be the number */
}
#digit2 {
top: -2em;
}
#digit3 {
top: 0em;
}Run Code Online (Sandbox Code Playgroud)
<div>
<span id='digit1'>1 2 3 4 5 6 7 8 9 0</span>
</div>
<div>
<span id='digit2'>1 2 3 4 5 6 7 8 9 0</span>
</div>
<div>
<span id='digit3'>1 2 3 4 5 6 7 8 9 0</span>
</div>
<button id='spinner'>Spin It</button>Run Code Online (Sandbox Code Playgroud)
版本2 :(仅使用数字增量效果而不是旋转效果)
这是使用大致相同的代码与前一个,但不像以前一个在创建animation使得从一数到另一个一个渐进的(以及由此产生的自旋效应)的运动,这里的动画,使运动更象骤升从一个数字到另一个数字,从而产生增量效应.
跳跃是通过保持top位置相同直到刚好移动到下一个时间来实现的(也就是说,top设置为0em直到动画的9.9%但是突然变为10%-1em).
window.onload = function() {
var spinner = document.getElementById('spinner');
spinner.onclick = spinit;
var el = document.querySelectorAll("span[id*=digit]");
for (i = 0; i < el.length; i++) {
el[i].addEventListener("animationend", randomize, false);
el[i].addEventListener("webkitAnimationEnd", randomize, false);
el[i].addEventListener("oanimationend", randomize, false);
el[i].addEventListener("MSAnimationEnd", randomize, false);
}
}
function randomize() {
var rand = Math.floor(Math.random() * 9);
this.style.top = -1 * rand + "em";
this.classList.toggle('animate');
}
function spinit() {
var el = document.querySelectorAll("span[id*=digit]");
for (i = 0; i < el.length; i++) {
el[i].classList.toggle('animate');
}
}Run Code Online (Sandbox Code Playgroud)
div {
width: 1em;
height: 1em;
overflow: hidden;
line-height: 1em;
display: inline-block;
}
span {
position: relative;
}
.animate {
-webkit-animation: spinit 0.2s 5;
-moz-animation: spinit 0.2s 5;
animation: spinit 0.2s 5;
}
@-webkit-keyframes spinit {
0% { top: 0em; }
9.9% { top: 0em; }
10%{ top: -1em; }
19.9%{ top: -1em; }
20%{ top: -2em; }
29.9%{ top: -2em; }
30%{ top: -3em; }
39.9%{ top: -3em; }
40%{ top: -4em; }
49.9%{ top: -4em; }
50% { top: -5em; }
59.9%{ top: -5em; }
60%{ top: -6em; }
69.9%{ top: -6em; }
70%{ top: -7em; }
79.9%{ top: -7em; }
80%{ top: -8em; }
89.9%{ top: -8em; }
90%{ top: -9em; }
99.9%{ top: -9em; }
100% { top: -9em; }
}
@-moz-keyframes spinit {
0% { top: 0em; }
9.9% { top: 0em; }
10%{ top: -1em; }
19.9%{ top: -1em; }
20%{ top: -2em; }
29.9%{ top: -2em; }
30%{ top: -3em; }
39.9%{ top: -3em; }
40%{ top: -4em; }
49.9%{ top: -4em; }
50% { top: -5em; }
59.9%{ top: -5em; }
60%{ top: -6em; }
69.9%{ top: -6em; }
70%{ top: -7em; }
79.9%{ top: -7em; }
80%{ top: -8em; }
89.9%{ top: -8em; }
90%{ top: -9em; }
99.9%{ top: -9em; }
100% { top: -9em; }
}
@keyframes spinit {
0% { top: 0em; }
9.9% { top: 0em; }
10%{ top: -1em; }
19.9%{ top: -1em; }
20%{ top: -2em; }
29.9%{ top: -2em; }
30%{ top: -3em; }
39.9%{ top: -3em; }
40%{ top: -4em; }
49.9%{ top: -4em; }
50% { top: -5em; }
59.9%{ top: -5em; }
60%{ top: -6em; }
69.9%{ top: -6em; }
70%{ top: -7em; }
79.9%{ top: -7em; }
80%{ top: -8em; }
89.9%{ top: -8em; }
90%{ top: -9em; }
99.9%{ top: -9em; }
100% { top: -9em; }
}
/* Set the value according to the on-load position of the spinner */
#digit1 {
top: -4em;
/* -4em means 5 will be the number */
}
#digit2 {
top: -2em;
}
#digit3 {
top: 0em;
}Run Code Online (Sandbox Code Playgroud)
<div>
<span id='digit1'>1 2 3 4 5 6 7 8 9 0</span>
</div>
<div>
<span id='digit2'>1 2 3 4 5 6 7 8 9 0</span>
</div>
<div>
<span id='digit3'>1 2 3 4 5 6 7 8 9 0</span>
</div>
<button id='spinner'>Spin It</button>Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
32000 次 |
| 最近记录: |