【原】移动web动画设计的一点心得——css3实现跑步

今年3月份,由于公司业务需要,我转岗到微信产品部,离开了TID团队,人都是有感情的动物,更何况在一个团队呆了快 3 年,心中十分舍不得,鬼哥说了“天下没有不散的宴席...”,在我的世界里又多了一次离别的伤感(虽然还在隔壁工作)。加入了微信产品中心后,开始新的团队生活,工作比以前忙多了,有时周六也要上班,需要更快更高效的完成任务,除了重构页面,需要主动参与边缘外的工作,承担更多。最近比较忙,给自己敲个响钟:注意身体。

说完题外话,开始近期的主题动画设计。虽然css3动画基础知识学习过,但以前项目使用场景比较少,并没有太多的实践,加入新团队以来,做得几个项目与动画有关,尝试用css3来实现,过程中遇到了不少坑。

大学学过一个月画画,但没有这方面天赋,连简单卡通动画也画不好,于是在国外网站找来如下动画,利用它来做例子,并把这次用 css3 实现动画的原理分享给大家~

来自 dribbble 某位大师的作品,GIF图中一个小女孩抱着一只猫在跑步,非常可爱,动作轻巧,过渡自然。

回到项目需求,要实现类似上图卡通人物跑步动画,分析结果如下:

1.跑步动画可以应用在不同的场景

要求人物的背景是透明的,图片保证高清,避免边缘杂边

2.跑步动画运动速度与动作成正比关系

人物跑步速度越快,身体动作越快;人物跑步速度为零时,身体动作马上停止在当前的状态

3.跑步动画效果流畅

不会出现卡顿现象

GIF实现跑步

用PS打开该大师的 GIF 图,在时间轴窗口中有 24 张不同的图片,通过一帧一帧的播放来实现跑步动画,很简单得说明做一个精细的动画需要多费点心思和劳动力啊,向大师表示敬礼~

 

项目组要求的动画跟上图人物大小差不多,一开始跟交互和视觉的同事讨论时,尝试使用 gif 来实现动画,使用7张图片轮播,间隔 0.2 秒可满足的动画效果,简单实现如下:

分析下gif动画

好处:实现简单、可维护性高、工作成本低

缺点:只适合简单的动画效果,不能动态控制动画

那么项目的硬性要求(控制动画的暂停、速度等)让我放弃了对gif实现跑步的想法~

CSS3实现跑步

放弃了 gif,而 swf 也不是我们的选择,canvas 实现也是可以的,这里不做介绍,本次主题是 css3 动画~

跑步动画的实现

方式一:通过切换 7 张图片来实现

@-webkit-keyframes charector-1{
    0% {background-image: url(charector_1.png);}
    14.3% {background-image: url(charector_2.png);}
    28.6% {background-image: url(charector_3.png);}
    42.9% {background-image: url(charector_4.png);}
    57.2% {background-image: url(charector_5.png);}
    71.5% {background-image: url(charector_6.png);}
    85.8% {background-image: url(charector_7.png);}
    100% {background-image: url(charector_1.png);}
}

方式二:7 张图片合成 1 张,通过切换背景图片位置来实现

@-webkit-keyframes charector-1{
    0% {background-position: 0 0;}
    14.3% {background-position: -180px 0;}
    28.6% {background-position: -360px 0;}
    42.9% {background-position: -540px 0;}
    57.2% {background-position: -720px 0;}
    71.5% {background-position: -900px 0;}
    85.8% {background-position: -1080px 0;}
    100% {background-position: 0 0;}
}

分析这2种方式

方式一:

实现起来会比较简单,但带来额外的 7 个请求数

7 张图片总大小为:50k

方式二:

需要设计雪碧图,并量取背景位置,请求数少

雪碧图大小为:37k

可以看出多张图片合成的雪碧图比 7 张图片还少 13k 外,还可以减少 7 个HTTP请求,那么切换背景位置方式是比较好的,代码如下:

HTML:

<div class="charector"></div>

CSS:

.charector{
position: absolute;
width: 180px;
height: 300px;
background: url(../img/charector.png) 0 0 no-repeat;
-webkit-animation-name: charector-1;/* 动画名称 */
-webkit-animation-iteration-count: infinite;/* 动画无限播放 */
-webkit-animation-timing-function: step-start;/* 马上跳到动画每一结束桢的状态 */
-webkit-animation-duration: 950ms;/* 动画运行的时间 */
}
@-webkit-keyframes charector-1{
    0% {background-position: 0 0;}
    14.3% {background-position: -180px 0;}
    28.6% {background-position: -360px 0;}
    42.9% {background-position: -540px 0;}
    57.2% {background-position: -720px 0;}
    71.5% {background-position: -900px 0;}
    85.8% {background-position: -1080px 0;}
    100% {background-position: 0 0;}
}

demo,这里下载(请使用 webkit 内核的浏览器打开)

加快跑步速度、暂停跑步的实现

加快跑步速度:可以通过快速切换背景图片位置,animation-duration 可以控制动画运行的时间,那么减少动画的时间可以提升跑步的速度,通过在父级动态加载不同的功能 class 来运行不同的动画,从而改变跑步速度

详细内容请看代码,留意注释

HTML:

<div class="charector-wrap " id="js_wrap">
    <div class="charector"></div>
</div>

<a class="run-xfast" href="#none">最快</a>
<a class="run-fast" href="#none">快</a>
<a class="run-normal" href="#none">正常</a>
<a class="run-slow" href="#none">慢</a>
<button class="btn-paused">暂停</button>

CSS:

.charector{
position: absolute;
width: 180px;
height:300px;
background: url(../img/charector.png) 0 0 no-repeat;
-webkit-animation-iteration-count: infinite;/* 动画无限播放 */
-webkit-animation-timing-function:step-start;/* 马上跳到动画每一结束桢的状态 */
}
/* 跑步动画名称 */
@-webkit-keyframes person-xfast{/* 超快 */
    0% {background-position: 0 0;}
    14.3% {background-position: -180px 0;}
    28.6% {background-position: -360px 0;}
    42.9% {background-position: -540px 0;}
    57.2% {background-position: -720px 0;}
    71.5% {background-position: -900px 0;}
    85.8% {background-position: -1080px 0;}
    100% {background-position: 0 0;}
}
@-webkit-keyframes person-fast{/* 快 */
    0% {background-position: 0 0;}
    14.3% {background-position: -180px 0;}
    28.6% {background-position: -360px 0;}
    42.9% {background-position: -540px 0;}
    57.2% {background-position: -720px 0;}
    71.5% {background-position: -900px 0;}
    85.8% {background-position: -1080px 0;}
    100% {background-position: 0 0;}
}
@-webkit-keyframes person-normal{/* 正常 */
    0% {background-position: 0 0;}
    14.3% {background-position: -180px 0;}
    28.6% {background-position: -360px 0;}
    42.9% {background-position: -540px 0;}
    57.2% {background-position: -720px 0;}
    71.5% {background-position: -900px 0;}
    85.8% {background-position: -1080px 0;}
    100% {background-position: 0 0;}
}
@-webkit-keyframes person-slow{/* 慢 */
    0% {background-position: 0 0;}
    14.3% {background-position: -180px 0;}
    28.6% {background-position: -360px 0;}
    42.9% {background-position: -540px 0;}
    57.2% {background-position: -720px 0;}
    71.5% {background-position: -900px 0;}
    85.8% {background-position: -1080px 0;}
    100% {background-position: 0 0;}
}
/* 跑步动作频率控制 */
.xfast .charector{/* 超快 */
-webkit-animation-name: person-xfast;
-webkit-animation-duration: 500ms;
}
.fast .charector{/* 快 */
-webkit-animation-name: person-fast;
-webkit-animation-duration: 650ms;
}
.normal .charector{/* 正常 */
-webkit-animation-name: person-normal;
-webkit-animation-duration: 800ms;
}
.slow .charector{/* 慢 */
-webkit-animation-name: person-slow;
-webkit-animation-duration: 950ms;
}

暂停跑步:使用 animation-play-state:paused 可以暂停正在进行的动画,并停留到当前的动作,那么当用户停止操作时,给父级加上功能 class 来停止动画

CSS:

/* 暂停动画 */
.paused .charector{
-webkit-animation-play-state:paused;
}

最后再通过 js 控制不同的跑步速度。

jQuery:

$(document).ready(function(){
        $("a").on("click",function(e){
            $("#js_wrap").find(".charector-wrap").removeClass("paused");
            $("#js_wrap").attr("class","charector-wrap " + $(e.target).attr("class").split("-")[1])
        })
        $(".btn-paused").click(function(){
            $("#js_wrap").addClass("paused");
        })
    })

最后界面:

demo,这里下载(请使用 webkit 内核的浏览器打开)

总结:

animation 适合相对简单的动画,使用起来比较灵活,如支持切换不同的动画名、暂定动画等

animation-timing-function 的 step-start 属性等不完全支持 android 2.1~4.3 、ios 4.3 系统

 

ok~ 跑步动画到此结束,下期来个拆信封的动画,敬请期待~

 

作者:白树

出处:http://peunzhang.cnblogs.com/

时间: 2025-01-21 08:24:22

【原】移动web动画设计的一点心得——css3实现跑步的相关文章

2012年Web创新设计和开发的15个趋势

Craig Grannell 访问了行业的精英们关于2012年Web设计和开发的趋势. 2012看来注定是有趣的一年.经济的下滑继续广泛地打击行业,看不到结束的尽头.政府极力审查网络,否认公民的基本权利,支撑摇摇欲坠的媒体公司. 对网页设计和开发,2012还是比较混乱的一年.我们处于很多小矛盾当中:移动贪婪地占领市场份额;原生App威胁开放的互联网;收费墙阻碍曾经免费的信息;合作与分裂的冲突;复古(Skeuomorphism)的交互模式挑战创新的设计模式. 我们很难预测将来会发生什么,但是一些设

Web 页面设计的色彩理论及应用

web|设计|页面 我们在设计的运用上重点在于创造一个没有过的形态,把形体润饰得协调美观,它受社会的制约,重视地方特征.为了在设计中有效的使用色彩我们必须掌握一些色彩的基础理论知识,结合自己的实际经验,来营造我们的作品.同一色彩有数之不尽的应用方法,并没有非常机械的色彩调和的法则,在一定的原则下靠我们自己的眼睛和审美观点来做出选择. 色彩构成(Interaction of color),可以理解为色彩的作用,是在色彩科学体系的基础上,研究符合人们知觉和心理原则的配色.配色有三类要素:光学要素(明

《响应式Web图形设计》一13.4 多图像解决方案

13.4 多图像解决方案 响应式Web图形设计 如果你想对图像质量有更多把握,同时还可以不拘泥于一种图像格式,那么是时候该考虑下picture元素和srcset属性了. 13.4.1 picture元素 picture元素(见图13.17)是响应式图像社区(网址是http://picture.responsiveimages.org/)提出的新元素,旨在帮助网页设计师在用户可见的内容中指定合适的图像. 如果用户使用一个高清分辨率的大屏幕来访问网站,那么我们可以为之提供高清大图. 如果用户使用常规

【Web动画】CSS3 3D 行星运转 &amp;&amp; 浏览器渲染原理

承接上一篇:[CSS3进阶]酷炫的3D旋转透视 . 最近入坑 Web 动画,所以把自己的学习过程记录一下分享给大家. CSS3 3D 行星运转 demo 页面请戳:Demo.(建议使用Chrome打开) 本文完整的代码,以及更多的 CSS3 效果,在我 Github 上可以看到,也希望大家可以点个 star. 嗯,可能有些人打不开 demo 或者页面乱了,贴几张效果图:(图片有点大,耐心等待一会) CSS3 3D 行星运转效果图 随机再截屏了一张: 强烈建议你点进 Demo页感受一下 CSS3

Silverlight &amp;amp; Blend动画设计系列十二

Silverlight & Blend动画设计系列十二:三角函数(Trigonometry)动画之自由旋转(Free-form rotation) 说到对象的旋转,或许就会联想到对象角度的概念.对象的旋转实现实际上就是利用对象 的角度改变来实现的位置变换,在<Silverlight & Blend动画设计系列二:旋转动画( RotateTransform)>一文中有对对象的不同角度变换的实现介绍,本篇要介绍的自由旋转( Free-form rotation)将借助<Fun

商业Web站点设计策略

web|策略|设计|站点    相信很大一部分人知道,我们国内的很多web站点设计项目都存在着一个特点,那就是将设计和制作混为一谈.所谓的设计站点,就是简单的把客户给的资料图形化,不考虑任何其他的因素,比如能否让站点实现预期的商业收益,让站点真正给用户提供他们想要的信息和服务.于是,大量的站点形同虚设,成了白白浪费时间.金钱.人力,最后却成立占用网络空间的一堆乏人问津的文件组合.因为一般性的web站点制作技术很易于掌握,所以,有能力制作网站的人是比比皆是,在能作和能设计之间,人们的界限慢慢模糊.

[精华]web架构设计经验分享!

经验|经验分享|精华|设计|web架构 本人作为一位web工程师,着眼最多之处莫过于 性能与架构,本次幸得参与sd2.0大会,得以与同行广泛交流,于此二方面,有些心得,不敢独享,与众博友分享,本文是这次参会与众同撩交流的心得,有兴趣者可以查看视频 架构设计的几个心得: 一,不要过设计:never over design 这是一个常常被提及的话题,但是只要想想你的架构里有多少功能是根本没有用到,或者最后废弃的,就能明白其重要性了,初涉架构设计,往往倾向于设计大而化 一的架构,希望设计出具有无比扩展

WEB交互设计

文章描述:WEB交互设计-源自桌面系统,根源于生活. WEB交互设计-源自桌面系统,根源于生活 从DOC时代发展到现在的桌面时代  我们的web设计其实源自操作系统内的软件设计,这是最好的参考.拿windows 7系统的 media player来说,如图的交互状态: media player非常的容易上手,使用很便捷简单. 主次功能何时显示,会帮助用户做出正确的指引. 而你会发现,这其实就是按照我们生活中的收音机,或音乐播放器来做的.使用其他产品如是.如计算器等等: 按钮有基本三种状态:默认,

web交互设计方法:页面表达常用方式

<页面表达常用方式>是整个"web交互设计方法"中的一部分: 设计师在设计页面时,应该在页面上建立许多视觉层次,引导用户的视觉焦点.把用户的注意力吸引到最重要的元素上,然后才把视线引导到其他重要程度次要的信息上.这样便于用户快捷迅速地找到自己所需,更好的完成阅读.浏览任务.这里介绍几种页面表达的常用方式. 一.页面的浏览顺序 对用户扫描页面的时候进行视线跟踪,这叫做"视觉流".好的设计能够让人们按照顺畅的次序沿着它向前流动.人们一般的习惯是从左到右.从上