将 css3 动画转换为画布动画的任何方法
Any way to convert css3 animation to canvas animation?
我需要从这里通过画布制作 gif 图像。
有没有办法将css3动画转换为画布动画?
我正在寻找一些很棒的文本动画,但它总是由 css3 制作。我只是想知道有一种简单的转换方法,或者我需要自己重写它。
谢谢!
以下是使用 html5 canvas 将动画捕获到.GIF中的一种方法
Greensock 动画库是一个优秀的动画库,可以像 CSS3 动画一样操作 DOM 元素。
但对你来说重要的是,Greensock 还可以为任何 JavaScript 对象设置动画。
这意味着您可以:
-
创建一个 JS 对象,该对象基于该 JSObject 的属性在 html5 画布上绘制单个动画帧。例如:
// create a JSObject capable of drawing a rotating rectangle var RotatingRect={ cx:canvas.width/2, cy:canvas.height/2, w:50, h:35, ww:-50/2, hh:-35/2, rangle:0, draw:function(){ ctx.clearRect(0,0,cw,ch); ctx.translate(this.cx,this.cy); ctx.rotate(this.rangle); ctx.beginPath(); ctx.rect(this.ww,this.hh,this.w,this.h); ctx.closePath(); ctx.fill(); ctx.stroke(); ctx.rotate(-this.rangle); ctx.translate(-this.cx,-this.cy); ctx.setTransform(1,0,0,1,0,0); }, }
-
使用 Greensock 通过更改 JSObject 的属性来驱动动画。然后请求在画布上重绘每个"框架"。格林索克每次触发格林索克时都有一个
onUpdate
事件// Use Greensock to animate from RotatingRect's current angle var tl=TweenLite.to(RotatingRect,5,{ paused:true, rangle:PI2*2, ease:"Quart.easeOut", onUpdate:function(){this.target.draw();}, onComplete:function(){log('complete',RotatingRect);} } );
-
(可选)使用 GifJS 添加新的 GIF 框架,只要 Greensock 导致绘制新的画布框架。
// Add to the bottom of RotatingRect.draw() // Add a GIF frame from the current canvas content gif.addFrame(canvasElement);
工具:
格林索克动画库
gifJS 脚本
Html5 Canvas 元素
下面是示例代码和演示:
var canvas=document.getElementById("canvas");
var ctx=canvas.getContext("2d");
var cw=canvas.width;
var ch=canvas.height;
ctx.fillStyle='skyblue';
ctx.strokeStyle='lightgray';
ctx.lineWidth=3;
var PI=Math.PI;
var PI2=PI*2;
var RotatingRect={
cx:canvas.width/2,
cy:canvas.height/2,
w:50,
h:35,
ww:-50/2,
hh:-35/2,
rangle:0,
draw:function(){
ctx.clearRect(0,0,cw,ch);
ctx.translate(this.cx,this.cy);
ctx.rotate(this.rangle);
ctx.beginPath();
ctx.rect(this.ww,this.hh,this.w,this.h);
ctx.closePath();
ctx.fill();
ctx.stroke();
ctx.rotate(-this.rangle);
ctx.translate(-this.cx,-this.cy);
ctx.setTransform(1,0,0,1,0,0);
},
}
// Use Greensock to animate from RotatingRect's current angle
var tl=TweenLite.to(RotatingRect,5,{
paused:true,
rangle:PI2*2,
ease:"Quart.easeOut",
onUpdate:function(){this.target.draw();},
onComplete:function(){log('complete',RotatingRect);}
}
);
RotatingRect.draw();
$('#play').click(function(){ tl.play(); });
$('#replay').click(function(){ tl.restart(); });
body{ background-color: ivory; }
#canvas{border:1px solid red;}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.9.1/jquery.min.js"></script>
<script src="http://cdnjs.cloudflare.com/ajax/libs/gsap/latest/TweenLite.min.js"></script>
<button id=play>Play</button>
<button id=replay>Replay</button>
<br><canvas id="canvas" width=300 height=300></canvas>
相关文章:
- 如何设置html元素填充的动画
- 如何使用动画实现纸张推车
- 找不到在 create-js 中运行的动画,未列出任何错误
- 将 css3 动画转换为画布动画的任何方法
- 使用任何动画更改 SPAN 类
- Javascript - 从任何位置将元素动画到屏幕中心
- JavaScript在CSS3动画之后不显示任何内容
- 在网页上设置GIF动画-任何重新启动它们的方法
- 正在查找动画书框架.Turn.js的任何替代方案
- 将画布形状从任何位置动画到中心
- 如何在调用window.open()时显示进度条或任何其他动画
- 任何延迟边缘动画直到可见的方法
- 播放/暂停任何Canvas动画
- 任何好的JavaScript动画框架
- 如何显示网站加载的百分比,而不是gif或任何动画图像
- 不能让动画在jquery中工作.我尝试了所有方法,但它对任何点击按钮都没有反应
- 如何在没有任何悬停的情况下运行css转换动画
- 将画布用于 Web 动画会导致任何操作
- JQuery等待任何函数完成后再启动另一个函数——ajax、动画和音频
- 检测页面上的任何内容是否正在动画化