FLIP
- FLIP就是First、Last、Invert、Play。
First
表示转换元素的初始状态。
Last
表示转换元素的最终状态。
Invert
通过transform反转First和Last之间的变化。例如First在向下移动90px得到Last,就将Last在向上移动90px,让它看起来像First。
Play
将Invert的变化删除,让Last回到原来的位置。
示例代码
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45
| class Flip { constructor(element, options = null) { this.element = element; this.first = element.getBoundingClientRect(); this.options = options ? options : { duration: 500, easing: 'ease-in-out' }; } updateFirst(){ this.first = this.element.getBoundingClientRect(); }
play(options=null){ let last = this.element.getBoundingClientRect(); let delta = { x: this.first.x - last.x, y: this.first.y - last.y, width: this.first.width / last.width, height: this.first.height / last.height }; let player = this.element.animate([ { transformOrigin: 'top left', transform: ` translate(${delta.x}px, ${delta.y}px) scale(${delta.width}, ${delta.height})` }, { transformOrigin: 'top left', transform: 'none' } ], options ? options : this.options); player.onfinish = () => { this.updateFirst(); }; } }
|