年会做了个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支持比较好的浏览器打开哈)。

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. 【实战项目】【FLEX】#900 实现拖控件功能

    一.功能说明:拖控件的功能(类似FLEX,VS 里面的拖控件). 提示:大家对事件的注册和派发的说法可能不一样.因为在FLEX中和在Java中,叫法有的区别.但是本质是一样的. 注册事件  == 设置 ...

  2. Alpha 冲刺报告(9/10)

    Alpha 冲刺报告(9/10) 队名:洛基小队 峻雄(组长) 已完成:角色属性功能的测试版 明日计划:准备α版本的ppt 剩余任务:尽量完成角色属性功能 困难:缺乏编程经验,很难自己独立完成编写,只 ...

  3. U-Mail邮件群发触发器功能助力营销自动化

    小编在朋友圈看到的人工智能讨论越来越多,越来越多的上班族惶恐不安,担心自己的饭碗不保将被人工智能所取代,这说明智能化.自动化正成为各行业的趋势,营销也概莫能外.营销的自动化意味着将大大节省从业人员的精 ...

  4. [T-ARA][For you]

    歌词来源:http://music.163.com/#/song?id=33682511 作曲 : Monster Factory [作曲 : Monster Factory] 作词 : Monste ...

  5. 【原创】Apache ab出现 apr_pollset_poll: The timeout specified has expired 错误

    使用如下参数可避免 -s timeout Seconds to max. wait for each response Default is 30 seconds -k Use HTTP KeepAl ...

  6. EventBus轻松使用

    什么是EventBus 由greenrobot组织贡献(该组织还贡献了greenDAO),一个Android事件发布/订阅轻量级框架,功能:通过解耦发布者和订阅者简化Android事件传递,Event ...

  7. iptables.md

    iptables基本概念 工作流程 1.一个数据包进入网卡时,它首先进入PREROUTING链,内核根据数据包目的IP判断是否需要转发出去. 2.如果数据包就是进入本机的,它就会沿着图向下移动,到达I ...

  8. msf后渗透

    生成exe后门 msfvenom -p windows/meterpreter/reverse_tcp lhost=192.168.31.131 lport=4444 -f exe -o 4444.e ...

  9. 关于vmware workstation10常见问题

    简单的说明:win7和win10的解决办法都是这个,都可以用这个解决. 这是一个共性的问题. 出现这个问题的原因是: a.要么是系统更新没有及时正确的关闭虚拟机导致的; b.没有及时将虚拟机手动关闭再 ...

  10. .NET平台下开源三维 GIS (地形与游戏)平台资料

    .net平台下开源(免费)三维(地形,游戏)GIS平台 open source (free) 3d (terrain,game) gis platform based on .net (C#) Axi ...