你的位置:首页 > 网页设计

[网页设计]css3实现循环执行动画,且动画每次都有延迟


一、最终效果

 

需求:gift图片的小动画每隔2s执行一次。

需求就一句话,我们看一下实现过程。

二、实现过程

1、网页结构

<!DOCTYPE html><html lang="en"><head>  <meta charset="UTF-8">  <title>Document</title>  <style>  a {    display: inline-block;    background-color: #cc2222;    text-decoration: none;    color: #fff;    font-size: 14px;    padding: 10px 12px;    width: 100px;    position: relative;  }    .ico {    position: absolute;    width: 14px;    height: 16px;    background: url(images/ico.png) no-repeat center;    background-size: 100%;    position: absolute;    top: 4px;    right: 27px;  }  </style></head><body>  <nav>    <a href="javascript:;" class="box">              一元夺宝               <div class="ico"></div>            </a>  </nav></body></html>

View Code

2、原始动画

原始动画效果为:鼠标hover上去出现动画。

动画样式如下:

/*动画*/  .ico:hover{  -webkit-animation: Tada 1s both;  -moz-animation: Tada 1s both;  -ms-animation: Tada 1s both;  animation: Tada 1s both}/*浏览器兼容性部分略过*/@keyframes Tada {  0% {    transform: scale(1);    transform: scale(1)  }  10%,20% {    transform: scale(0.9) rotate(-3deg);    transform: scale(0.9) rotate(-3deg)  }  30%,50%,70%,90% {    transform: scale(1.1) rotate(3deg);    transform: scale(1.1) rotate(3deg)  }  40%,60%,80% {    transform: scale(1.1) rotate(-3deg);    transform: scale(1.1) rotate(-3deg)  }  100% {    transform: scale(1) rotate(0);    transform: scale(1) rotate(0)  }}

效果:鼠标hover上去gift图片会动一动。

3、实现变化后的需求

需求变动,要求不再是hover上去展示动画,而是每隔2s展示一次动画。

思路:不需要hover上去出现动画,就把hover去掉,每隔2s显示一次动画,很容易想到延迟2s,然后动画一直执行。

此时相关样式变成:

.ico{-webkit-animation: Tada 1s 2s both infinite;-moz-animation: Tada 1s 2s both infinite;-ms-animation: Tada 1s 2s both infinite;animation: Tada 1s 2s both infinite;}

但是显示的效果是:页面加载第一次出现动画会延迟2s,后面的动画将不再有延迟。如下,这是不符合需求的。

为了看出效果,下图为延迟6s的效果。

此时换种思路,不要延迟执行动画,而是动画的效果本身就是前2s元素不动,后1s是元素动,然后一直循环执行。 这样在视觉上就会看起来是延迟2s执行1s动画。

计算一下,原来的百分比节点变成了多少。

将动画总时长变成3s,用计算出的百分比替换原来的百分比,代码如下:

.ico{  -webkit-animation: Tada 3s both infinite;  -moz-animation: Tada 3s both infinite;  -ms-animation: Tada 3s both infinite;  animation: Tada 3s both infinite;}@keyframes Tada {  0% {    transform: scale(1);    transform: scale(1)  }  70%,73%{    transform: scale(0.9) rotate(-3deg);    transform: scale(0.9) rotate(-3deg)  }  77%,83%,90%,97% {    transform: scale(1.1) rotate(3deg);    transform: scale(1.1) rotate(3deg)  }  80%,87%,93%{    transform: scale(1.1) rotate(-3deg);    transform: scale(1.1) rotate(-3deg)  }  100% {    transform: scale(1) rotate(0);    transform: scale(1) rotate(0)  }}

效果就是我们期望的了。

完整代码如下:

<!DOCTYPE html><html lang="en"><head>  <meta charset="UTF-8">  <title>demo of starof</title>  <style>  a {    display: inline-block;    background-color: #cc2222;    text-decoration: none;    color: #fff;    font-size: 14px;    padding: 10px 12px;    width: 100px;    position: relative;  }    .ico {    position: absolute;    width: 14px;    height: 16px;    background: url(images/ico.png) no-repeat center;    background-size: 100%;    position: absolute;    top: 4px;    right: 27px;  }  /*动画*/  .ico{  -webkit-animation: Tada 3s both infinite;  -moz-animation: Tada 3s both infinite;  -ms-animation: Tada 3s both infinite;  animation: Tada 3s both infinite;}@-webkit-keyframes Tada {  0% {    -webkit-transform: scale(1);    transform: scale(1)  }  70%,73% {    -webkit-transform: scale(0.9) rotate(-3deg);    transform: scale(0.9) rotate(-3deg)  }  77%,83%,90%,97% {    -webkit-transform: scale(1.1) rotate(3deg);    transform: scale(1.1) rotate(3deg)  }  80%,87%,93% {    -webkit-transform: scale(1.1) rotate(-3deg);    transform: scale(1.1) rotate(-3deg)  }  100% {    -webkit-transform: scale(1) rotate(0);    transform: scale(1) rotate(0)  }}@-moz-keyframes Tada {  0% {    -moz-transform: scale(1);    transform: scale(1)  }  70%,73% {    -moz-transform: scale(0.9) rotate(-3deg);    transform: scale(0.9) rotate(-3deg)  }  77%,83%,90%,97% {    -moz-transform: scale(1.1) rotate(3deg);    transform: scale(1.1) rotate(3deg)  }  80%,87%,93%{    -moz-transform: scale(1.1) rotate(-3deg);    transform: scale(1.1) rotate(-3deg)  }  100% {    -moz-transform: scale(1) rotate(0);    transform: scale(1) rotate(0)  }}@-ms-keyframes Tada {  0% {    -ms-transform: scale(1);    transform: scale(1)  }  70%,73% {    -ms-transform: scale(0.9) rotate(-3deg);    transform: scale(0.9) rotate(-3deg)  }  77%,83%,90%,97% {    -ms-transform: scale(1.1) rotate(3deg);    transform: scale(1.1) rotate(3deg)  }  80%,87%,93% {    -ms-transform: scale(1.1) rotate(-3deg);    transform: scale(1.1) rotate(-3deg)  }  100% {    -ms-transform: scale(1) rotate(0);    transform: scale(1) rotate(0)  }}@keyframes Tada {  0% {    transform: scale(1);    transform: scale(1)  }  70%,73%{    transform: scale(0.9) rotate(-3deg);    transform: scale(0.9) rotate(-3deg)  }  77%,83%,90%,97% {    transform: scale(1.1) rotate(3deg);    transform: scale(1.1) rotate(3deg)  }  80%,87%,93%{    transform: scale(1.1) rotate(-3deg);    transform: scale(1.1) rotate(-3deg)  }  100% {    transform: scale(1) rotate(0);    transform: scale(1) rotate(0)  }}  </style></head><body>  <nav>    <a href="javascript:;" class="box">              一元夺宝               <div class="ico"></div>    </a>  </nav></body></html>

View Code

 

本文只是介绍一种思路,关于动画各个参数详情可参考:

css3中变形与动画(一)

css3中变形与动画(二)

css3中变形与动画(三)

 

本文作者starof,因知识本身在变化,作者也在不断学习成长,文章内容也不定时更新,为避免误导读者,方便追根溯源,请诸位转载注明出处:http://www.cnblogs.com/starof/p/5443445.html有问题欢迎与我讨论,共同进步。




几月份去塞班旅游最好什么时候去塞班旅游最便宜去塞班旅游跟团要多少钱去塞班旅游需要多少钱塞班旅游大概多少钱山西著名景点有那些? 浪漫金秋森林深处 最美的秋日情怀 深圳荔枝公园在哪里、怎么去? 深圳中国民俗文化村的门票是多少? 思罗河漂流小孩可以玩吗?石表山思罗河漂流安全吗? 清远市区到古龙峡漂流有车吗?清远市区到古龙峡漂流基地打车多少钱? 清远古龙峡漂流怎么去?到古龙峡漂流坐什么车去? 南海区大沥镇到怀集燕峰峡温泉漂流度假村怎么坐车?燕峰峡温泉漂流攻略? 天露山漂流票价?新兴天露山漂流旅游攻略? 新兴天露山禅龙峡官网?天露山禅龙峡漂流时间? 2015天露山杜鹃花开了吗?天露山禅龙峡杜鹃花何时开? 天露山杜鹃花期?新兴天露山杜鹃花什么时候开? 北京石景山游乐园“狂欢之夏”有什么好玩的? 海南白石岭风景区具体位置在哪?怎么去? 2015毕业旅行去哪里好? 北京石景山游乐园“狂欢之夏”什么时候开始? 5-22F-CD35/H401 Datasheet 5-22F-CD35/H401 Datasheet 5-22F-CD35/H4102 Datasheet 5-22F-CD35/H4102 Datasheet 5-22F-CD35/H4104 Datasheet 5-22F-CD35/H4104 Datasheet 高品质的山西旅游 高品质的山西旅游 高品质的山西旅游 深圳出发至山西旅游 深圳出发至山西旅游 深圳出发至山西旅游 深圳五台山双飞六游 深圳五台山双飞六游 深圳五台山双飞六游