在美团参加 hackathon 时,使用 impress.js 作了一个商家上线流程的复盘工具。以为 impress.js 很适合用于作 presentation, 所以进行一个简单地总结。css
impress.js 是一个用于展现的前端框架,基于大量 css3 的动画等特性。最大的特色是其基于 transform 来构建,经过空间位置的移动以及旋转来体现变化,视觉冲击性很强。
该库须要有很好的 css 功底以及空间想象能力,由于整个 app 彻底是靠代码进行编辑,并非像传统的 ppt 工具进行拖拽以及鼠标点击。html
能够在github上查看 example 和 demo。前端
其实做者制做的 demo 就几乎将全部可能用到的技巧都包含了,并在 github 中提供了源码,不过若是不仔细读源码的话极可能走不少弯路。css3
其实做者的想法很巧妙也很简单,impress.js 会根据 html 中 step 的顺序来渲染整个页面,对于每一个页面来讲只有三种重要的属性——scale,position,rotate。git
impress.js 会根据这些属性将每一页进行渲染,最后从第一页开始一步步进行播放,所以这些属性也就决定了补间动画的形式。在开始写代码以前必定要想好空间结构。github
虽然第一眼看过去很容易,可若是想作一个定制性很强的ppt仍是会遇到不少问题,在这里总结一些经验与技巧。api
在 impress.js 文件中能够设置一些默认值,我会慢慢对这些参数进行说明。前端框架
// some default config values. var defaults = { width: 1024, height: 768, maxScale: 1, minScale: 0, perspective: 1000, transitionDuration: 700 };
width
与height
是每页的基准长度和宽度,与 scale 相乘以后才是该页的大小,设置偏移量时须要对width
与height
进行参考。app
如下是计算 window 真实比例的代码。框架
var computeWindowScale = function ( config ) { var hScale = window.innerHeight / config.height, wScale = window.innerWidth / config.width, scale = hScale > wScale ? wScale : hScale; if (config.maxScale && scale > config.maxScale) { scale = config.maxScale; } if (config.minScale && scale < config.minScale) { scale = config.minScale; } return scale; };
能够知道画布会随着window
的缩放而自动进行缩放,maxScale
决定了画布最大值,而minScale
决定了最小为多大。千万不要将这里的scale
与data-scale
搞混淆。
.impress-enabled .step
调整 opacity 来控制非当前页的透明度
须要注意的是在更改 default
transitionDuration
以后还须要在 css 中修改 transitionDuration
。这样才能保证动画的同步。
impress-disabled
is added to body element by the impress.js script impress-enabled
after init() function is calledadditional past, present and future classes are added to step elements。经过这三个状态能够作出很酷的动画效果。
future
class appears on steps that were not yet visitedpresent
class appears on currently visible step - it's different from active class as present class is added when transition finishes (step is entered)past
class is added to already visited steps (when the step is left)