癫狂的dom——利用css3让dom动起来

不废话,先来看一下效果:

我的名字在颤抖!

下面上代码:

html部分:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title></title>
    <link href="shake.css" rel="stylesheet" type="text/css" />
</head>
<body>
    <span class="shake" style="margin: 40px;">李庆</span>
</body>
</html>

css部分:

/* shake **/
.shake{
    display: inline-block;
    /* -webkit-transform-origin: center center; */
    -ms-transform-origin: center center;
    /* transform-origin: center center; */
    /* -webkit-animation-name: shake-slow; */
    -ms-animation-name: shake-slow;
    animation-name: shake-slow;
    -webkit-animation-duration: 5s;
    -ms-animation-duration: 5s;
    /* animation-duration: 5s; */
    /* -webkit-animation-iteration-count: infinite; */
    -ms-animation-iteration-count: infinite;
    animation-iteration-count: infinite;
    -webkit-animation-timing-function: ease-in-out;
    -ms-animation-timing-function: ease-in-out;
    /* animation-timing-function: ease-in-out; */
    /* -webkit-animation-delay: 0s; */
    -ms-animation-delay: 0s;
    /* animation-delay: 0s; */
    /* -webkit-animation-play-state: running; */
    -ms-animation-play-state: running;
    /* animation-play-state: running; */
}

@-webkit-keyframes shake-slow { 0% { -webkit-transform: translate(0px, 0px) rotate(0deg); }
    2% { -webkit-transform: translate(-1px, 3px) rotate(-1.5deg); }
    4% { -webkit-transform: translate(-4px, 5px) rotate(-1.5deg); }
    6% { -webkit-transform: translate(-1px, 6px) rotate(-0.5deg); }
    8% { -webkit-transform: translate(5px, -4px) rotate(-3.5deg); }
    10% { -webkit-transform: translate(-7px, -3px) rotate(-3.5deg); }
    12% { -webkit-transform: translate(-1px, 8px) rotate(2.5deg); }
    14% { -webkit-transform: translate(3px, -5px) rotate(-1.5deg); }
    16% { -webkit-transform: translate(1px, 0px) rotate(2.5deg); }
    18% { -webkit-transform: translate(-6px, -10px) rotate(-0.5deg); }
    20% { -webkit-transform: translate(3px, -2px) rotate(1.5deg); }
    22% { -webkit-transform: translate(0px, 0px) rotate(-2.5deg); }
    24% { -webkit-transform: translate(-5px, -4px) rotate(1.5deg); }
    26% { -webkit-transform: translate(-1px, 3px) rotate(-3.5deg); }
    28% { -webkit-transform: translate(1px, 1px) rotate(-3.5deg); }
    30% { -webkit-transform: translate(-4px, 8px) rotate(1.5deg); }
    32% { -webkit-transform: translate(-9px, 7px) rotate(-3.5deg); }
    34% { -webkit-transform: translate(4px, -9px) rotate(-2.5deg); }
    36% { -webkit-transform: translate(1px, -6px) rotate(-2.5deg); }
    38% { -webkit-transform: translate(-4px, 0px) rotate(-2.5deg); }
    40% { -webkit-transform: translate(3px, -7px) rotate(0.5deg); }
    42% { -webkit-transform: translate(4px, 4px) rotate(-0.5deg); }
    44% { -webkit-transform: translate(8px, -4px) rotate(-2.5deg); }
    46% { -webkit-transform: translate(9px, 9px) rotate(-3.5deg); }
    48% { -webkit-transform: translate(6px, -8px) rotate(-0.5deg); }
    50% { -webkit-transform: translate(-1px, 4px) rotate(-3.5deg); }
    52% { -webkit-transform: translate(4px, 6px) rotate(-1.5deg); }
    54% { -webkit-transform: translate(9px, -3px) rotate(2.5deg); }
    56% { -webkit-transform: translate(8px, -2px) rotate(-3.5deg); }
    58% { -webkit-transform: translate(-2px, -9px) rotate(-0.5deg); }
    60% { -webkit-transform: translate(-1px, -5px) rotate(2.5deg); }
    62% { -webkit-transform: translate(-8px, 3px) rotate(2.5deg); }
    64% { -webkit-transform: translate(6px, -2px) rotate(-3.5deg); }
    66% { -webkit-transform: translate(-5px, 9px) rotate(-1.5deg); }
    68% { -webkit-transform: translate(3px, 1px) rotate(-0.5deg); }
    70% { -webkit-transform: translate(6px, 4px) rotate(-1.5deg); }
    72% { -webkit-transform: translate(-6px, -5px) rotate(1.5deg); }
    74% { -webkit-transform: translate(-8px, 0px) rotate(-0.5deg); }
    76% { -webkit-transform: translate(-5px, -8px) rotate(1.5deg); }
    78% { -webkit-transform: translate(5px, -3px) rotate(-1.5deg); }
    80% { -webkit-transform: translate(-6px, -3px) rotate(-1.5deg); }
    82% { -webkit-transform: translate(7px, 8px) rotate(-1.5deg); }
    84% { -webkit-transform: translate(-6px, 9px) rotate(0.5deg); }
    86% { -webkit-transform: translate(1px, 8px) rotate(-3.5deg); }
    88% { -webkit-transform: translate(-9px, -2px) rotate(1.5deg); }
    90% { -webkit-transform: translate(4px, -6px) rotate(-1.5deg); }
    92% { -webkit-transform: translate(0px, -1px) rotate(0.5deg); }
    94% { -webkit-transform: translate(2px, -9px) rotate(2.5deg); }
    96% { -webkit-transform: translate(-9px, 1px) rotate(-2.5deg); }
    98% { -webkit-transform: translate(-9px, -5px) rotate(-3.5deg); } }

@-ms-keyframes shake-slow { 0% { -ms-transform: translate(0px, 0px) rotate(0deg); }
    2% { -ms-transform: translate(-10px, 5px) rotate(-2.5deg); }
    4% { -ms-transform: translate(7px, 7px) rotate(-3.5deg); }
    6% { -ms-transform: translate(8px, -7px) rotate(-2.5deg); }
    8% { -ms-transform: translate(-8px, 3px) rotate(-0.5deg); }
    10% { -ms-transform: translate(3px, -10px) rotate(-1.5deg); }
    12% { -ms-transform: translate(-9px, -6px) rotate(2.5deg); }
    14% { -ms-transform: translate(-2px, -6px) rotate(-0.5deg); }
    16% { -ms-transform: translate(6px, -1px) rotate(0.5deg); }
    18% { -ms-transform: translate(5px, -1px) rotate(0.5deg); }
    20% { -ms-transform: translate(7px, -5px) rotate(-0.5deg); }
    22% { -ms-transform: translate(-8px, 5px) rotate(2.5deg); }
    24% { -ms-transform: translate(0px, 4px) rotate(2.5deg); }
    26% { -ms-transform: translate(-1px, 2px) rotate(-1.5deg); }
    28% { -ms-transform: translate(-1px, -1px) rotate(1.5deg); }
    30% { -ms-transform: translate(-5px, -5px) rotate(2.5deg); }
    32% { -ms-transform: translate(0px, 7px) rotate(-0.5deg); }
    34% { -ms-transform: translate(-9px, 3px) rotate(-0.5deg); }
    36% { -ms-transform: translate(3px, -5px) rotate(-2.5deg); }
    38% { -ms-transform: translate(5px, 2px) rotate(-0.5deg); }
    40% { -ms-transform: translate(6px, -3px) rotate(0.5deg); }
    42% { -ms-transform: translate(-4px, -6px) rotate(-0.5deg); }
    44% { -ms-transform: translate(9px, 2px) rotate(-3.5deg); }
    46% { -ms-transform: translate(6px, -4px) rotate(1.5deg); }
    48% { -ms-transform: translate(6px, 5px) rotate(2.5deg); }
    50% { -ms-transform: translate(-9px, -2px) rotate(-2.5deg); }
    52% { -ms-transform: translate(-7px, 9px) rotate(-0.5deg); }
    54% { -ms-transform: translate(-5px, -5px) rotate(-3.5deg); }
    56% { -ms-transform: translate(-6px, -10px) rotate(1.5deg); }
    58% { -ms-transform: translate(-3px, 1px) rotate(-3.5deg); }
    60% { -ms-transform: translate(3px, 5px) rotate(2.5deg); }
    62% { -ms-transform: translate(-1px, -8px) rotate(2.5deg); }
    64% { -ms-transform: translate(6px, -7px) rotate(-0.5deg); }
    66% { -ms-transform: translate(-7px, -1px) rotate(0.5deg); }
    68% { -ms-transform: translate(-3px, -4px) rotate(-1.5deg); }
    70% { -ms-transform: translate(-10px, 9px) rotate(2.5deg); }
    72% { -ms-transform: translate(9px, 9px) rotate(2.5deg); }
    74% { -ms-transform: translate(-6px, 8px) rotate(-0.5deg); }
    76% { -ms-transform: translate(-5px, -10px) rotate(-2.5deg); }
    78% { -ms-transform: translate(-7px, -9px) rotate(-0.5deg); }
    80% { -ms-transform: translate(8px, -4px) rotate(2.5deg); }
    82% { -ms-transform: translate(9px, 4px) rotate(-0.5deg); }
    84% { -ms-transform: translate(-1px, -1px) rotate(2.5deg); }
    86% { -ms-transform: translate(-6px, -3px) rotate(0.5deg); }
    88% { -ms-transform: translate(-2px, -4px) rotate(0.5deg); }
    90% { -ms-transform: translate(5px, 1px) rotate(0.5deg); }
    92% { -ms-transform: translate(1px, 2px) rotate(-3.5deg); }
    94% { -ms-transform: translate(-5px, -10px) rotate(1.5deg); }
    96% { -ms-transform: translate(-6px, 3px) rotate(-3.5deg); }
    98% { -ms-transform: translate(-1px, -7px) rotate(-2.5deg); } }

@keyframes shake-slow { 0% { transform: translate(0px, 0px) rotate(0deg); }
    2% { transform: translate(6px, -7px) rotate(2.5deg); }
    4% { transform: translate(8px, -8px) rotate(2.5deg); }
    6% { transform: translate(1px, -8px) rotate(-3.5deg); }
    8% { transform: translate(-3px, 4px) rotate(-0.5deg); }
    10% { transform: translate(0px, -3px) rotate(1.5deg); }
    12% { transform: translate(-1px, 2px) rotate(0.5deg); }
    14% { transform: translate(6px, 6px) rotate(-1.5deg); }
    16% { transform: translate(-7px, 4px) rotate(-0.5deg); }
    18% { transform: translate(7px, 8px) rotate(-3.5deg); }
    20% { transform: translate(-6px, 2px) rotate(1.5deg); }
    22% { transform: translate(9px, 5px) rotate(-1.5deg); }
    24% { transform: translate(7px, -2px) rotate(0.5deg); }
    26% { transform: translate(-7px, -10px) rotate(-0.5deg); }
    28% { transform: translate(-10px, -8px) rotate(-1.5deg); }
    30% { transform: translate(8px, 4px) rotate(0.5deg); }
    32% { transform: translate(0px, 4px) rotate(1.5deg); }
    34% { transform: translate(-8px, 6px) rotate(-0.5deg); }
    36% { transform: translate(-5px, 7px) rotate(1.5deg); }
    38% { transform: translate(-4px, -4px) rotate(-1.5deg); }
    40% { transform: translate(9px, 4px) rotate(-1.5deg); }
    42% { transform: translate(9px, -5px) rotate(2.5deg); }
    44% { transform: translate(-5px, -4px) rotate(-2.5deg); }
    46% { transform: translate(7px, -7px) rotate(1.5deg); }
    48% { transform: translate(-5px, 8px) rotate(0.5deg); }
    50% { transform: translate(9px, 1px) rotate(-1.5deg); }
    52% { transform: translate(-9px, -5px) rotate(-3.5deg); }
    54% { transform: translate(-2px, 9px) rotate(1.5deg); }
    56% { transform: translate(6px, -1px) rotate(1.5deg); }
    58% { transform: translate(-6px, 0px) rotate(-0.5deg); }
    60% { transform: translate(3px, 1px) rotate(1.5deg); }
    62% { transform: translate(5px, -7px) rotate(-0.5deg); }
    64% { transform: translate(9px, 2px) rotate(2.5deg); }
    66% { transform: translate(6px, 0px) rotate(-2.5deg); }
    68% { transform: translate(5px, -4px) rotate(-2.5deg); }
    70% { transform: translate(-8px, 5px) rotate(-2.5deg); }
    72% { transform: translate(-6px, -2px) rotate(0.5deg); }
    74% { transform: translate(-3px, 7px) rotate(-3.5deg); }
    76% { transform: translate(-7px, -8px) rotate(-3.5deg); }
    78% { transform: translate(-1px, -2px) rotate(2.5deg); }
    80% { transform: translate(8px, 6px) rotate(-2.5deg); }
    82% { transform: translate(-2px, -9px) rotate(2.5deg); }
    84% { transform: translate(8px, -10px) rotate(-0.5deg); }
    86% { transform: translate(-6px, 0px) rotate(2.5deg); }
    88% { transform: translate(-1px, 9px) rotate(-3.5deg); }
    90% { transform: translate(-7px, 8px) rotate(1.5deg); }
    92% { transform: translate(-10px, -8px) rotate(0.5deg); }
    94% { transform: translate(-8px, 6px) rotate(1.5deg); }
    96% { transform: translate(4px, -9px) rotate(2.5deg); }
    98% { transform: translate(-4px, 9px) rotate(0.5deg); } }

注意: 如代码复制到本地无法执行,请检查css属性配置与当前运行浏览器是否保持一致。

html部分没有什么可说的,下面主要对css部分进行说明:

display: inline-block;
当前元素必须声明为行内块元素。


transform-origin: center center;
设置元素旋转的中心坐标。

不同浏览器下该属性的名称列表:

浏览器属性名
IE10 Firefox Operatransform-origin
IE9-ms-transform-origin(只支持2D)
Safari Chrome-webkit-transform-origin
Firefox-moz-transform-origin
Opera(只支持2D)-o-transform-origin

  
这个属性在部分浏览器还支持配置3D中心坐标(2D默认只有2个值,如上例的center center),相比2D多出一个z轴坐标。

属性值枚举值列表:

描述
x-axis定义视图被置于 X 轴的何处。值为:left center right length %
y-axis定义视图被置于 X 轴的何处。值为:top center bottom length %
z-axis定义视图被置于 X 轴的何处。值为:length

animation-name: shake-slow;
为 @keyframes 动画规定一个名称。

不同浏览器下该属性的名称列表:

浏览器属性名
IE10 Firefox Operaanimation-name
Safari Chrome-webkit-animation-name

animation-duration: 5s;
完整执行一次动画所需时间,单位为秒或毫秒。

不同浏览器下该属性的名称列表:

浏览器属性名
IE10 Firefox Operaanimation-duration
Safari Chrome-webkit-animation-duration

animation-iteration-count: infinite;
重复执行动画次数,值为int或infinite(表示无限循环执行)。

不同浏览器下该属性的名称列表:

浏览器属性名
IE10 Firefox Operaanimation-iteration-count
Safari Chrome-webkit-animation-iteration-count

animation-timing-function: ease-in-out;
执行动画的速度曲线。

不同浏览器下该属性的名称列表:

浏览器属性名
IE10 Firefox Operaanimation-timing-function
Safari Chrome-webkit-animation-timing-function

  
属性值枚举值列表:

描述
linear动画从头到尾的速度是相同的。
ease默认。动画以低速开始,然后加快,在结束前变慢。
ease-in动画以低速开始。
ease-out动画以低速结束。
ease-in-out动画以低速开始和结束。
cubic-bezier(n,n,n,n)在 cubic-bezier 函数中自己的值。可能的值是从 0 到 1 的数值。

  
备注:cubic-bezier是以贝塞尔曲线来定义速度曲线,四个参数分别对应绘制曲线所需的第二个节点和第三个节点的坐标(x1,y1,x2,y2)。

PS:笔者这里实在没看出来ease和ease-in-out的区别,有深入研究的同学求指导。


animation-delay: 0s;
动画延迟执行时间。

不同浏览器下该属性的名称列表:

浏览器属性名
IE10 Firefox Operaanimation-delay
Safari Chrome-webkit-animation-delay

  
备注:这个延迟执行时间可以为负数(如当前完整动画需要执行5秒,定义为-2秒则表示立即开始执行动画并从第2秒开始执行动画,即动画不是从头开始执行)。


animation-play-state: running;
动画执行状态,js可以通过该属性来控制动画执行和暂停。

不同浏览器下该属性的名称列表:

浏览器属性名
IE10 Firefox Operaanimation-play-state
Safari Chrome-webkit-animation-play-state

  
属性值枚举值列表:

描述
paused规定动画已暂停。
running规定动画正在播放。

@keyframes
定义动画规则(这里才是真正定义动画的地方)。

不同浏览器下该属性的名称列表:

浏览器属性名
Firefox-moz-keyframes
Opera-o-keyframes
Safari Chrome-webkit-keyframes

  
语法规则:
@keyframes animationname {keyframes-selector {css-styles;}}

语法属性列表:

描述
animationname必需。定义动画的名称。
keyframes-selector必需。动画时长的百分比。合法的值:0-100% from(与 0% 相同) to(与 100% 相同)
css-styles必需。一个或多个合法的 CSS 样式属性。

transform
调整dom元素位置(允许对元素进行旋转、缩放、移动或倾斜)。

不同浏览器下该属性的名称列表:

浏览器属性名
IE10 Firefox Operatransform
IE9-ms-transform
Safari Chrome-webkit-transform

  
transform属性的值非常多,且值为函数,下面仅给出例子中所使用值的说明:

描述
translate(x,y)调整动画的2D位置(x和y对应图形的偏移量)。
rotate(angle)调整动画的2D旋转角度。

  
完整的属性值列表戳这里
  
  
用一句话来解释@keyframes animationname {keyframes-selector {css-styles;}}的意思:
  
当动画执行到keyframes-selector时刻时把定义的css-styles应用在dom上(我们无需关心在两个keyframes-selector之间css-styles是如何过渡的)。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值