HTML5/CSS3翻转动画(一)

翻转动画效果,就是将页面的元素(文字,图片)加入围绕坐标轴翻转的效果,在Webkit内核的浏览器中,很容易实现。而其它内核暂时支持不是很好。首先,我们创建页面:

<!DOCTYPE html>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<script type="text/javascript" src="js/jquery.js"></script>
<title>Flip Text</title>
</head>
<body>
<div id="cover">
<div id="coverText">
<div id="welcomeStr1">Welcome To HTML5!</div>
<div id="welcomeStr2">Hello World!</div>
</div>
</div>
</body>

代码很简单,其中仅包含两个文本信息用于测试。引入jQuery是为了后面的事件绑定,我们使用CSS3的动画支持来展示,那么下面来逐一看看CSS代码:

*{
margin:0px;
padding:0px;
}
#cover{
position:absolute;
width:100%;
height:100%;
min-width: 768px;
overflow: hidden;
background: -webkit-gradient(linear,left top, left bottom, color-stop(0, #00BDF2), color-stop(1, #003D7B));
background: -moz-linear-gradient(top,#00BDF2, #003D7B);
}

这段很简单,就是设置页面背景色的。这里可以在FF中看到效果。下面是对文本的CSS支持:

#coverText {
position: absolute;
left: 18%;
top: 30%;
width:64%;
text-align:center;
}
#welcomeStr1,#welcomeStr2 {
height: 86px;
font-size: 64px;
line-height: 86px;
letter-spacing: 2px;
color: white;
font-family:"Courier New";
-webkit-animation-time-function: linear;
}

目前我们得到如下效果:
[img]http://dl.iteye.com/upload/attachment/614283/fc5872ac-e828-3f5a-b11f-7c581471b49b.png[/img]
下面设置让文字翻转的CSS3动画:

@-webkit-keyframes flip {
0% {
-webkit-transform: rotateY(0deg) scale(1,1);
color: white;
}
70% {
-webkit-transform: rotateY(0deg) scale(1,1);
color: white;
}
100% {
-webkit-transform: rotateY(90deg) scale(0.6,0.7);
color: #3C4043;
}
}

该段代码的含义是,围绕y轴翻转文字,并在最后文字大小发生变化,并变色。当然如果想沿着x轴旋转,那么使用rotateX就可以了,这很简单。现在在CSS中补加如下代码:

-webkit-animation: flip 5s infinite;
-webkit-text-size-adjust: none;

我们可以看到的效果是文字围绕y轴主键变小,并变色,最终合并到y轴,但突然还原。这个效果是没错的,因为我们只有前半部分的动画效果,而后半部分翻转回来的没有设置,也就是我们看到的主键消失但突然出现的效果了。下面继续设置CSS动画,因为翻转过去了还得翻转回来吧:

@-webkit-keyframes unflip {
0% {
-webkit-transform: rotateY(90deg) scale(0.6,0.7);
color: #3C4043;
}
100% {
-webkit-transform: rotateY(0deg) scale(1,1);
color: white;
}
}

那么翻转回来我们定义名称为unfilp,此时不设置70%的停顿延时,直接翻转回来即可。我们看到,0%时是和上面flip中100%接上的,scale和color都是一致的。而100%是和flip中0%对应的,那么就可以达到还原的效果了。
此时可以修改-webkit-animation来测试这一步的效果。
好,现在问题来了,我们设置了两个CSS动画,那么怎么应用可以按顺序来执行呢,写到-webkit-animation中使用多个动画效果,好像不支持,或许是我写的不对。那么只好借助js来简单实现了。也就是事件绑定。Webkit中有个事件是webkitAnimationEnd,我们可以将两个动画绑定到这个事件上,就可以达到自动按顺序执行。我们编写一个js函数来达到这个效果:

flip = function(element, flipName, flipTime, unflipName, unflipTime) {
if(!element){
return;
}
element.style.webkitAnimation = "" + flipName + " " + flipTime;
return $(element).bind('webkitAnimationEnd', function() {
switch (element.style.webkitAnimationName) {
case flipName:
return element.style.webkitAnimation = "" + unflipName + " " + unflipTime;break;
case unflipName:
return element.style.webkitAnimation = "" + flipName + " " + flipTime;break;
}
});
};

flip函数定义功能如下:首先判断一下element,当然可以不做,只要在调用的时候保证即可。然后给webkitAnimation赋值,就是我们定义的CSS动画名称和执行的时间。下面就是核心功能所在了。巧妙使用事件绑定和switch的返回机制。将webkitAnimationEnd按照filp动画的名称进行绑定。这里格外注意,element.style.webkitAnimation = "" + flipName + " " + flipTime;一句绑定了正向翻转的CSS动画和时间,那么为了有反向的效果,下面的Switch段是相反的,也就是case filpName时进行unflip动画。
写好了js函数,那么我们来调用:

$(function() {
flip($("#welcomeStr1")[0], 'flip', '1.5s', 'unflip', '0.7s');
flip($("#welcomeStr2")[0], 'flip', '1.5s', 'unflip', '0.7s');
});

我们把两个文本段绑定flip执行1.5秒,unflip执行0.7秒。最终我们就可以看到翻转的文字效果了:
[img]http://dl.iteye.com/upload/attachment/614285/649159e4-f433-3dba-8a6c-63cf5d518701.png[/img]
我们截取到一个翻转中的效果,大家可以使用webkit内核的浏览器来进行测试,就可以看到连续的翻转效果了。
此时两个文本段的动画效果是同步的,因为我们设置的时间都是一样的,如果想不同步,修改时间就可以了,这样就能根据自己的需求来确定了。
最后附上本文整体代码,jQuery的库那就自行去添加吧:

<!DOCTYPE html>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<script type="text/javascript" src="js/jquery.js"></script>
<title>Flip Text</title>
<style>
*{
margin:0px;
padding:0px;
}
#cover{
position:absolute;
width:100%;
height:100%;
min-width: 768px;
overflow: hidden;
background: -webkit-gradient(linear,left top, left bottom, color-stop(0, #00BDF2),color-stop(1, #003D7B));
background: -moz-linear-gradient(top,#00BDF2, #003D7B);
}
#coverText {
position: absolute;
left: 18%;
top: 30%;
width:64%;
text-align:center;
}
#welcomeStr1,#welcomeStr2 {
height: 86px;
font-size: 64px;
line-height: 86px;
letter-spacing: 2px;
color: white;
font-family:"Courier New";
-webkit-animation-time-function: linear;
}

@-webkit-keyframes flip {
0% {
-webkit-transform: rotateY(0deg) scale(1,1);
color: white;
}
70% {
-webkit-transform: rotateY(0deg) scale(1,1);
color: white;
}
100% {
-webkit-transform: rotateY(90deg) scale(0.6,0.7);
color: #3C4043;
}
}
@-webkit-keyframes unflip {
0% {
-webkit-transform: rotateY(90deg) scale(0.6,0.7);
color: #3C4043;
}
100% {
-webkit-transform: rotateY(0deg) scale(1,1);
color: white;
}
}
</style>
<script type="text/javascript">
flip = function(element, flipName, flipTime, unflipName, unflipTime) {
if(!element){
return;
}
element.style.webkitAnimation = "" + flipName + " " + flipTime;
return $(element).bind('webkitAnimationEnd', function() {
switch (element.style.webkitAnimationName) {
case flipName:
return element.style.webkitAnimation = "" + unflipName + " " + unflipTime;break;
case unflipName:
return element.style.webkitAnimation = "" + flipName + " " + flipTime;break;
}
});
};

$(function() {
flip($("#welcomeStr1")[0], 'flip', '1.5s', 'unflip', '0.7s');
flip($("#welcomeStr2")[0], 'flip', '1.5s', 'unflip', '0.7s');
});
</script>
</head>
<body>
<div id="cover">
<div id="coverText">
<div id="welcomeStr1">Welcome To HTML5!</div>
<div id="welcomeStr2">Hello World!</div>
</div>
</div>
</body>

本文谨抛砖引玉的介绍,欢迎交流,希望对使用者有用。
[url=http://sarin.iteye.com/blog/1331326]下一篇[/url]我们继续来深入探讨HTML5/CSS3的简单动画。
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值