合理选择css3动画实现方式
使用css3实现动画,比js控制DOM属性的方式要高效很多、流畅很多,主要分transition和animation两大方式。
- transition适用于一次性变换
- animation适用于循环动画和多层动画
- 涉及DOM缩放、旋转、移动、旋转时,优先以transform属性实现
- 结合class的add/remove,灵活使用
不管怎么实现,都至少需要设定元素的起始形态和最终形态,形态的变化才能产生动画。
例一:鼠标hover事件就完美契合transition变换。用class的add和remove控制元素变化时,配上transition增加过渡效果,也是种动画方式。
<style>
.btn{
width:100px;
height: 32px;
line-height: 32px;
border-radius: 5px;
border:1px solid #ccc;
text-align: center;
float: left;
margin-left: 80px;
cursor: pointer;
}
.trans{
transition: color .5s, background-color .5s;
-webkit-transition: color .5s, background-color .5s;
}
.btn:hover{
background-color: #fe7124;
color: #fff;
}
</style>
<div class="btn">无过渡</div>
<div class="btn trans">有过渡</div>

例二:animation实现多层动画,以transform:rotate()控制旋转。此处如果同时用translate控制位移,则会与旋转产生叠加,使效果怪异。
<style>
#animated_div {
width: 75px;
height: 42px;
background: #92B901;
color: #ffffff;
position: relative;
font-weight: bold;
font-size: 20px;
padding: 10px;
animation: animated_div 5s 1;
-moz-animation: animated_div 5s 1;
-webkit-animation: animated_div 5s 1;
-o-animation: animated_div 5s 1;
border-radius: 5px;
} @keyframes animated_div {
0% {transform: rotate(0deg); left: 0px;}
25% {transform: rotate(20deg);left: 0px;}
50% {transform: rotate(0deg);left: 500px;}
55% {transform: rotate(0deg);left: 500px;}
70% {transform: rotate(0deg);left: 500px;background: #1ec7e6;}
100% {transform: rotate(-360deg);left: 0px;}
}
</style>
<div id="animated_div">css手册案例</div>

例三:animation-play-state控制animation循环动画。当然也可以将animation放在单独的class类里面,通过add/remove class控制动画的播放与否。
<style>
#myPic{
display: block;
width: 120px;
height: 120px;
border-radius: 50%;
border:3px solid #fff;
box-shadow: 0 0 6px #999;
animation:picRotate 6s linear infinite;
}
@keyframes picRotate{
from {transform: rotate(0deg) }
to {transform: rotate(360deg)}
}
</style>
<img id="myPic" src="lib/img/demo003.jpg">
<button onclick="controlPlay()">控制旋转</button>
<script>
var myPic = document.getElementById("myPic");
function controlPlay() {
var state = myPic.style.animationPlayState;
if(state=="paused"){
myPic.style.animationPlayState = "running"
}else{
myPic.style.animationPlayState = "paused"
}
}
</script>

合理选择css3动画实现方式的更多相关文章
- CSS3 动画实现方法大全
常用效果总结(需要引用animate.css) <!doctype html> <html lang="en"> <head> <meta ...
- 使用jquery封装的动画脚本(无动画、css3动画、js动画)
自己封装好的showhide.js 包含无动画.css3动画.js动画 包括:fade(淡入淡出) slideUpDown(上下滑动) slideLeftRight(左右滑动) fadeSlid ...
- css3动画大全
<!doctype html> <html lang="en"> <head> <meta charset="UTF-8&quo ...
- 用CSS3动画特效实现弹窗效果
提示:如果大家觉得本篇实现的弹窗效果有用,可持续关注.接下会添加更多效果并且封装成插件,这样使用就方便了.效果查看: https://heavis.github.io/hidialog/index.h ...
- Bounce.js – 快速创建漂亮的 CSS3 动画效果
Bounce.js 是一个用于制作漂亮的 CSS3 关键帧动画的 JavaScript 库,使用其特有的方式生成的动画效果.只需添加一个组件,选择预设,然后你就可以得到一个短网址或者导出为 CSS 代 ...
- 【转】CSS3动画帧数科学计算法
本文来源于:财付通TID 原作者:bboy90 总结都浓缩在这个工具里了,想知道工具的地址或想窥探工具诞生的趣事请往下看 . —————————————————————– 华丽丽的开篇 ...
- CSS3 动画基础
该文为译文转载,原文地址:http://tech.163.com/mobile/10/0106/09/5SB96QSM00112K88.html 译文:你需要知道的CSS3 动画技术 原文:Wha ...
- demo: 全页面CSS3动画的一个参考例子
全页面CSS3动画的一个参考例子: http://wow.blizzard.cn/wow/wod-achievement/ 魔兽的一个活动页 第二页.第三页,文字进入页面 <script src ...
- CSS3 动画卡顿性能优化解决方案--摘抄
最近在开发小程序,与vue类似,它们都有生命周期这回事. onLoad 监听页面加载 onReady 监听页面初次渲染完成 onShow 监听页面显示 到底是什么意思? 所以这又触碰到了我的知识盲区, ...
随机推荐
- Fast Newman-FN算法以及模块度定义介绍
一.社区的定义 Newman第一次提出模块度定义就是在2004年发表的这篇文章“fast algorithm for community structure in networks”,第一次用量化的公 ...
- (转)MySQL优化系列
原文:http://blog.csdn.net/jack__frost/article/details/71194208 数据库,后端开发者必学,而且现在以MySQL居多.这个系列将系统化MySQL一 ...
- 【数组】Best Time to Buy and Sell Stock I/II
Best Time to Buy and Sell Stock I 题目: Say you have an array for which the ith element is the price o ...
- 原生js动态添加style,添加样式
原生js动态添加style,添加样式 第一种 var style="[assign-url='"+str+"']{display:initial}"; var ...
- docker 使用compose安装zookeeper集群
此基础镜像使用的为zookeeper的官方镜像 docker pull zookeeper 新建文件 docker-compose.yml version: ' services: zookeeper ...
- PTA (Advanced Level) 1027 Colors in Mars
Colors in Mars People in Mars represent the colors in their computers in a similar way as the Earth ...
- weblogic:local class incompatible: stream classdesc serialVersionUID
问题:jdk版本不兼容 方法:修改weblogic对应的jdk版本
- 使用 Nginx + Tomcat 搭建负载均衡
负载均衡 建立在现有网络结构之上,它提供了一种廉价有效透明的方法扩展网络设备和服务器的带宽.增加吞吐量.加强网络数据处理能力.提高网络的灵活性和可用性. 负载均衡,英文名称为Load Balance, ...
- 产环境部署node记录(三): centOS 7 mySQL和mongoDB的安装
[mySQL的安装]: CentOS7默认数据库是mariadb,现在来安装mySQL 1.下载安装包 这里下载了四个安装包,后面会用到 yum -y install perl perl-devel ...
- 读取XML文件(XmlNode和XmlElement区别)
XmlNode和XmlElement区别.这两个类的功能极其类似(因为我们一般都是在对Element节点进行操作). 1.通过继承关系XmlElement继承自XmlLinkedNode又继承自Xml ...