年会做了个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

  1. obj.addEventListener('animationend', function() {
  2. obj.removeEventListener('animationend', function(){}, false);
  3. }, false);
  1. $obj.on('animationend', function() {
  2. $obj.off('animationend');
  3. });

对于需要多次监听的,每次最好取消事件绑定。

兼容性:

动画开始 webkitAnimationStart | oAnimationStart | MSAnimationStart | animationstart

动画结束 webkitAnimationEnd | oAnimationEnd | MSAnimationEnd | animationend

动画重复 webkitAnimationIteration | oAnimationIteration | MSAnimationIteration | animationiteration

同样的,transition也有相应的监听事件,需要的朋友可以上一下度娘。

对于不同浏览器怎么判断如何选取相应的事件名称:

这里推荐一个处理H5&CSS3对浏览器兼容问题很方便的第三方库——modernizr.js,引入该库后直接上写法,内容细节这里不探讨了,有兴趣的朋友可以百度详细了解。

  1. var animationEventNames = {
  2.     'WebkitAnimation': 'webkitAnimationEnd',
        'OAnimation': 'oAnimationEnd',
  3.     'msAnimation' : 'MSAnimationEnd',
  4.     'animation' : 'animationend'
  5.   },
      animationEventName = animationEventNames[Modernizr.prefixed('animation')];
  6. $obj.on(animationEventName, function() {
  7. $obj.off(animationEventName);
  8. });

最后贴出自己做的DEMO,模仿自博客园“梦想天空”里的一个特效(尽量用chrome,ff等对CSS3支持比较好的浏览器打开哈)。

DEMO     源码

用CSS3做3D动画的那些事的更多相关文章

  1. css3图书3D动画

    css3图书3D动画,css3,立体特效,旋转效果,3D动画,css3图书3D动画是一款基于css3实现的立体旋转3D图书动画特效. 代码下载页:http://www.huiyi8.com/sc/71 ...

  2. css3-13 css3的3D动画如何实现

    css3-13 css3的3D动画如何实现 一.总结 一句话总结:这里是transform+setInterval实现.transform属性里面的rotate属性值变成rotateX或rotateY ...

  3. 如何制作css3的3d动画——以骰子旋转为例,详解css3动画属性

    首先先来看两个用css3实现的炫酷的3d动画效果 1 2 3 4 5   6 你没看错,这个炫酷的效果都是用css3实现的. 下面是动画实现所需要用到的几个css3属性. 1.perspective: ...

  4. 【原】CSS3的3D动画 ——3D旋转之骰子样式的钟表(2)下.md

    之前看到智能社主页的那个骰子样式的钟表,最近研究了一下,虽然没有仔细看他是怎么做的,但是学了css3的动画之后想自己尝试着写一下,用到的原理可能和智能社网站的不太一样,我自己主要用到了css3和js. ...

  5. 【巩固】CSS3的3D动画 ——3D旋转(1)

    最近学了妙味的css3的动画,2D,3D的都有,先写一个最简单的3d翻转效果,鼠标移入div,正反面翻转效果. 注意点有: 要给正反面外面加个父级: transform-style: preserve ...

  6. 纯CSS3实现3D动画导航,html5 webRTC技术实现免费网页电话拨打

    花了一周的时间完成了 说吧 (免费网页电话) 的前端开发工作,先将技术点总结如下: 免费电话采用最新的html5 webRTC 技术 实现互联网和电信MIS网互通实现网页电话,目前只有 google ...

  7. 【学】CSS3的3D动画 ——3D旋转之骰子样式的钟表(2)上

    这个是3D旋转的进阶版,是一个类似与骰子的正方体.这个版本只有秒数的个位数,还没有写整个钟表,下面那个版本好好想想该怎么写 这个效果需要用到transform-style: preserve-3d. ...

  8. css3做的动画

    基于放大缩小: http://www.credero.etall.cn/demo/jwtplay/3/content05.html 基于3d: http://www.credero.etall.cn/ ...

  9. [web前端] css3 transition属性实现3d动画效果

    cp from : https://www.cnblogs.com/chrxc/p/5123375.html transition属性是一个很强大的3d动画属性,我动手试了一下,很多在网上很火的网页动 ...

随机推荐

  1. JAVA入门之基础语言

    在上一章文章中,读者已经了解了如何搭建Java 开发环境及Java 程序的开发过程.从本篇文章开始讲解Java 的基本语言.这些基本语言的语法和其他一些编程语言相比有些是类似的,但还有很多不同之处,读 ...

  2. php各种主流框架的优缺点

    ThinkPHP ThinkPHP(FCS)是一个轻量级的中型框架,是从Java的Struts结构移植过来的中文PHP开发框架.它使用面向对象的开发结构和MVC模式,并且模拟实现了Struts的标签库 ...

  3. zabbix的日常监控-分布式监控(十)

    参考博文:http://blog.51cto.com/jinlong/2051966 zabbix proxy 可以代替 zabbix server 检索客户端的数据,然后把数据汇报给 zabbix ...

  4. 关于markdown格式的测试..

    标题 标题一 这是? 标题二 标题三 标题四 区块 1.这是一个列表项目 还是吗? 嵌套了? 空格了? 区块加列表 标题加二级列表 嘿嘿 无序列表 RED GREEN BLUE 有序列表 dog ca ...

  5. Mina源码研究

    目录 1. NioSocketAcceptor初始化源码研究 1.1 类图 1.2 方法调用时序图 1.3 初始化NioSocketAcceptor 1.4 SimpleIoProcessorPool ...

  6. jQuery实现简易轮播图的效果

    (图片素材取自于小米官网) 刚开始接触jQuery的学习,个人觉得如果为了实现多数的动态效果,jQuery的确很简易方便. 下面简易的轮播图效果,还请前辈多多指教~ (努力学习react vue an ...

  7. windows10 激活方法

    1.“以管理员身份”运行 依次输出以下命令: slmgr.vbs /upk 2. 接着输入以下命令: slmgr /ipk W269N-WFGWX-YVC9B-4J6C9-T83GX 3. 继续输入以 ...

  8. CSS3 新增颜色表示方式

    一.CSS1&2颜色表示方式(W3C标准) 1.Color name  颜色名称方式(用颜色关键字表示对应的颜色.) 例如:red(红色).blue(蓝色).pink(粉色) 优点:方便快捷而 ...

  9. python中string格式化

    python中可以对string, int, float等数据类型进行格式化操作.下面举例来说明一些常用操作. 先贴出 python 对 String Formatting Operations 讲解 ...

  10. P1439 【模板】最长公共子序列

    题目描述 给出1-n的两个排列P1和P2,求它们的最长公共子序列. 输入输出格式 输入格式: 第一行是一个数n, 接下来两行,每行为n个数,为自然数1-n的一个排列. 输出格式: 一个数,即最长公共子 ...