# StoryPanel **Repository Path**: withtimer/StoryPanel ## Basic Information - **Project Name**: StoryPanel - **Description**: 一个纯粹的WEB动画库,纯粹的JavaScript,支持动画融合,动画序列,自定义动画,各种回调,可以很方便的制作 各类平台的年终总结,如:支付宝年终总结,酷狗音乐年终总结,等等。它的使用范围远远不止于此。 发挥你的想象力,做任何你喜欢的动画效果。 - **Primary Language**: Unknown - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 3 - **Forks**: 1 - **Created**: 2020-01-06 - **Last Updated**: 2025-01-20 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # StoryPanel #### 它是什么? 一个纯粹的WEB动画库,纯粹的JavaScript,支持动画融合,动画序列,自定义动画,各种回调,可以很方便的制作 各类平台的年终总结,如:支付宝年终总结,酷狗音乐年终总结,等等。它的使用范围远远不止于此。 发挥你的想象力,做任何你喜欢的动画效果。 #### 重点 StoryPanel的每一个动画实例都是基于一个Dom对象的(比如一个div,一个img....)。这意味着你可以直接操作一 个StoryPanel对象,给它运行 各种各样的动画。 #### 怎么使用? #### 1. 第一步,毫无疑问,当然是引入你的工程(ES6)。 例如: script标签引入 #### 2. 创建StoryPanel对象。 例如:
#### 3. 如何创建一个动画。 例如:
#### 4. 创建融合动画。
StoryPanel实例化的对象有一个 createFusion 方法,用于创建融合动画。 例如: 下面创建一个边放大边渐变颜色的融合动画。 let dom2 = document.getElementById("box"); let action = new StoryPanel(dom2); let m1 =action.scaleTo({x:2,y:2},2000,CubeBezierType.Power2); let m2 =action.fadeBgColor({r:255,g:0,b:0,a:1},2000,CubeBezierType.Power2); action.createFusion(m1,m2).start(); #### 5. 创建序列动画。
StoryPanel实例化的对象有一个 createSequences 方法,用于创建融合动画。 例如:
下面创建一个先放大,后渐变的序列动画。 let dom2 = document.getElementById("box"); let action = new StoryPanel(dom2); let m1 =action.scaleTo({x:2,y:2},2000,CubeBezierType.Power2); let m2 =action.fadeBgColor({r:255,g:0,b:0,a:1},2000,CubeBezierType.Power2); action.createSequences(m1,m2); action.startAnimtionFormSequences(); //当然你也可以将融合动画加入到序列中去。 例如: let dom2 = document.getElementById("box"); let action = new StoryPanel(dom2); let m1 =action.scaleTo({x:2,y:2},2000,CubeBezierType.Power2); let m2 =action.fadeBgColor({r:255,g:0,b:0,a:1},2000,CubeBezierType.Power2); let m3 = action.createFusion(m1,m2); let m4 =action.fadeBgColor({r:255,g:255,b:0,a:1},2000,CubeBezierType.Power2); action.createSequences(m3,m4); action.startAnimtionFormSequences(); #### 6. CubeBezierType都有什么。 CubeBezierType都是动画曲线。它有如下内容: Linner, Easy, EasyOut, EasyIn, EasyInOut, Power2, Power5, Arc, Bow, Bounce, Elastic #### 7. 内置动画。
moveBy, moveTo, sizeTo, scaleTo, scaleBy, rotateTo, rotateBy, fadeOpacity, fadeBgColor, fadeFontColor, delayTime, callBackFunc #### 8. 如何创建自定义动画。 StoryPanel实例化的对象都存在一个 createCustiomAnimate 方法,用于创建自定义动画。 方法签名:createCustiomAnimate({draw, duration,type}) 例如:
下面创建一个把一个正方形的div,变换成一个圆形的div。 let dom = document.getElementById("box"); let action = new StoryPanel(dom2); let ac1 = action.createCustiomAnimate({ draw:(p)=>{ dom.style.borderRadius = p*100 /2 +"%"; }, duration:2000, type:CubeBezierType.Power2 }) ac1.start(); //Tips //其中p的值是0---1,逐渐增大,p从0变化到1的时间恰好是duration。 #### 9. QA环节
a.如果你想一个动画执行完毕之后,触发一个事件。你的sequences事件,可以是这样。 anyaction(scaleTo,rotateTo,...) -> callBackFunc b.如果你想一个动画执行完毕后,或者中途,执行另一个dom的动画。 anyaction ->allBackFunc(call) ->anyaction->.... 然后在call中执行开始另一个dom动画。如:call (){ anyaction -> anyaction -> ...} c.如果你想一个dom执行完一个动画后,休息一下,再执行另一个动画。 anyaction -> delayTime ->anyaction -> .... d.如何创建复杂的动画,例如,类似于支付宝的年终总结。 答案是可以的,不过你将操作数量众多的dom。这部分,Me正试图解决这种问题。 e.它能减少写css的代码量吗。 这个不好说,如果是考虑动画部分,确实是这样,但是具体到每一个dom的显示形式,还是需要写css的,毕竟它只是 一个动画Lib. f.能不能将不同的Dom动画融合起来。 这是不可以的,因为它是基于特定的dom的动画实例。在创建StoryPanel的时候就必须指定绑定的dom。 将不同dom的(或者说是不同StoryPanel的实例)的动画融合起来将会导致找不到指定dom从而报错。 同理,一个dom的动画序列也不可以加入不同的dom动画。 e.其他问题可以直接右键至2577388057zjl@gmail.com #### 10. 下一个版本。 a.更多的内置。 将会有更多的内置动画,更多的动画曲线,包括自定义曲线。 b.更方便的回调。 基于帧级别的,任意动画过程事件监听。 c.更好的性能。 嗯,是的。