用CSS3做3D动画的那些事
年会做了个3D变换的抽奖系统,在这里分享下通过CSS3制作3D效果的心得。抽奖系统虽然够炫酷,可惜抽的时候出了点bug,好几百人啊我的小心脏啊。虽然这个锅后面甩给会场的老爷电脑了(手动白眼)。
首先介绍几个实现3D效果的CSS3属性:
rotateY、translateZ
这两个transform属性值是实现3D效果比较常用的,首先要记清楚变换的坐标轴,X-水平、Y-竖直、Z垂直屏幕。
效果:
从左到右依次为:正常,translateZ(-200px),rotateY(45deg)。不过有点奇怪的是绿色的卡片有点变形,因为在父容器上添加了透视距离的属性,见下。
perspective
该属性为定义3D变换的元素与视图的距离,也就是透视距离。该属性不是添加在变换的元素上,而是添加到视图元素(变换元素的父元素)上。
在未定义该属性的情况下,translateZ 并不会生效,因为没有透视距离。若你的元素沿Z轴的移动值并不是基于百分比的情况下,只需保证 prespective 值大于 translateZ 值即可。
使用perspective属性需要谨慎,添加了透视距离有可能导致如上例中绿色卡片的效果。
兼容性:-webkit-perspective | perspective (以下CSS属性存在的兼容性写法均参考自W3CSchool)。
transform-style: flat | preserve-3d
定义变换方式
flat:子元素将不保留其 3D 位置
preserve-3d:子元素将保留其 3D 位置。
在做3D变换时,我们通常将该属性添加在变换元素上,并将值设为preserve-3d。
兼容性:-webkit-transform-style | transform-style
backface-visibility: visible | hidden
是否隐藏元素背面
效果:
上面五张卡片从左到右,rotate值依次为45deg、60deg、135deg、180deg、300deg,很直观的展示了该属性的效果。
兼容性:-webkit-backface-visibility | -moz-backface-visibility | -ms-backface-visibility | backface-visibility
有关性能
众所周知CSS3动画性能要比JS动画好,那在CSS3动画中要做哪些来提升性能呢?
1. 使用3D变换开启GPU加速:变换元素上添加属性: transform: translate3d(0,0,0);
2. 使用translate代替left或者marginLeft;
3. 使变换元素脱离文档流;
4. 减少阴影和圆角的使用。
事件
有人说JS动画相比CSS3动画的优点是可以监听到动画的结束,但其实CSS3动画一样有监听各个阶段的方法:
动画开始 animationstart
动画结束 animationend
动画重复 animationiteration
监听:
原生 & jQuery
- obj.addEventListener('animationend', function() {
- obj.removeEventListener('animationend', function(){}, false);
- }, false);
- $obj.on('animationend', function() {
- $obj.off('animationend');
- });
对于需要多次监听的,每次最好取消事件绑定。
兼容性:
动画开始 webkitAnimationStart | oAnimationStart | MSAnimationStart | animationstart
动画结束 webkitAnimationEnd | oAnimationEnd | MSAnimationEnd | animationend
动画重复 webkitAnimationIteration | oAnimationIteration | MSAnimationIteration | animationiteration
同样的,transition也有相应的监听事件,需要的朋友可以上一下度娘。
对于不同浏览器怎么判断如何选取相应的事件名称:
这里推荐一个处理H5&CSS3对浏览器兼容问题很方便的第三方库——modernizr.js,引入该库后直接上写法,内容细节这里不探讨了,有兴趣的朋友可以百度详细了解。
- var animationEventNames = {
- 'WebkitAnimation': 'webkitAnimationEnd',
'OAnimation': 'oAnimationEnd',- 'msAnimation' : 'MSAnimationEnd',
- 'animation' : 'animationend'
- },
animationEventName = animationEventNames[Modernizr.prefixed('animation')];- $obj.on(animationEventName, function() {
- $obj.off(animationEventName);
- });
最后贴出自己做的DEMO,模仿自博客园“梦想天空”里的一个特效(尽量用chrome,ff等对CSS3支持比较好的浏览器打开哈)。
用CSS3做3D动画的那些事的更多相关文章
- css3图书3D动画
css3图书3D动画,css3,立体特效,旋转效果,3D动画,css3图书3D动画是一款基于css3实现的立体旋转3D图书动画特效. 代码下载页:http://www.huiyi8.com/sc/71 ...
- css3-13 css3的3D动画如何实现
css3-13 css3的3D动画如何实现 一.总结 一句话总结:这里是transform+setInterval实现.transform属性里面的rotate属性值变成rotateX或rotateY ...
- 如何制作css3的3d动画——以骰子旋转为例,详解css3动画属性
首先先来看两个用css3实现的炫酷的3d动画效果 1 2 3 4 5 6 你没看错,这个炫酷的效果都是用css3实现的. 下面是动画实现所需要用到的几个css3属性. 1.perspective: ...
- 【原】CSS3的3D动画 ——3D旋转之骰子样式的钟表(2)下.md
之前看到智能社主页的那个骰子样式的钟表,最近研究了一下,虽然没有仔细看他是怎么做的,但是学了css3的动画之后想自己尝试着写一下,用到的原理可能和智能社网站的不太一样,我自己主要用到了css3和js. ...
- 【巩固】CSS3的3D动画 ——3D旋转(1)
最近学了妙味的css3的动画,2D,3D的都有,先写一个最简单的3d翻转效果,鼠标移入div,正反面翻转效果. 注意点有: 要给正反面外面加个父级: transform-style: preserve ...
- 纯CSS3实现3D动画导航,html5 webRTC技术实现免费网页电话拨打
花了一周的时间完成了 说吧 (免费网页电话) 的前端开发工作,先将技术点总结如下: 免费电话采用最新的html5 webRTC 技术 实现互联网和电信MIS网互通实现网页电话,目前只有 google ...
- 【学】CSS3的3D动画 ——3D旋转之骰子样式的钟表(2)上
这个是3D旋转的进阶版,是一个类似与骰子的正方体.这个版本只有秒数的个位数,还没有写整个钟表,下面那个版本好好想想该怎么写 这个效果需要用到transform-style: preserve-3d. ...
- css3做的动画
基于放大缩小: http://www.credero.etall.cn/demo/jwtplay/3/content05.html 基于3d: http://www.credero.etall.cn/ ...
- [web前端] css3 transition属性实现3d动画效果
cp from : https://www.cnblogs.com/chrxc/p/5123375.html transition属性是一个很强大的3d动画属性,我动手试了一下,很多在网上很火的网页动 ...
随机推荐
- JAVA入门之基础语言
在上一章文章中,读者已经了解了如何搭建Java 开发环境及Java 程序的开发过程.从本篇文章开始讲解Java 的基本语言.这些基本语言的语法和其他一些编程语言相比有些是类似的,但还有很多不同之处,读 ...
- php各种主流框架的优缺点
ThinkPHP ThinkPHP(FCS)是一个轻量级的中型框架,是从Java的Struts结构移植过来的中文PHP开发框架.它使用面向对象的开发结构和MVC模式,并且模拟实现了Struts的标签库 ...
- zabbix的日常监控-分布式监控(十)
参考博文:http://blog.51cto.com/jinlong/2051966 zabbix proxy 可以代替 zabbix server 检索客户端的数据,然后把数据汇报给 zabbix ...
- 关于markdown格式的测试..
标题 标题一 这是? 标题二 标题三 标题四 区块 1.这是一个列表项目 还是吗? 嵌套了? 空格了? 区块加列表 标题加二级列表 嘿嘿 无序列表 RED GREEN BLUE 有序列表 dog ca ...
- Mina源码研究
目录 1. NioSocketAcceptor初始化源码研究 1.1 类图 1.2 方法调用时序图 1.3 初始化NioSocketAcceptor 1.4 SimpleIoProcessorPool ...
- jQuery实现简易轮播图的效果
(图片素材取自于小米官网) 刚开始接触jQuery的学习,个人觉得如果为了实现多数的动态效果,jQuery的确很简易方便. 下面简易的轮播图效果,还请前辈多多指教~ (努力学习react vue an ...
- windows10 激活方法
1.“以管理员身份”运行 依次输出以下命令: slmgr.vbs /upk 2. 接着输入以下命令: slmgr /ipk W269N-WFGWX-YVC9B-4J6C9-T83GX 3. 继续输入以 ...
- CSS3 新增颜色表示方式
一.CSS1&2颜色表示方式(W3C标准) 1.Color name 颜色名称方式(用颜色关键字表示对应的颜色.) 例如:red(红色).blue(蓝色).pink(粉色) 优点:方便快捷而 ...
- python中string格式化
python中可以对string, int, float等数据类型进行格式化操作.下面举例来说明一些常用操作. 先贴出 python 对 String Formatting Operations 讲解 ...
- P1439 【模板】最长公共子序列
题目描述 给出1-n的两个排列P1和P2,求它们的最长公共子序列. 输入输出格式 输入格式: 第一行是一个数n, 接下来两行,每行为n个数,为自然数1-n的一个排列. 输出格式: 一个数,即最长公共子 ...