HTML5用canvas怎么实现动画效果

 我来答
育知同创教育
2017-03-29 · 百度知道合伙人官方认证企业
育知同创教育
1【专注:Python+人工智能|Java大数据|HTML5培训】 2【免费提供名师直播课堂、公开课及视频教程】 3【地址:北京市昌平区三旗百汇物美大卖场2层,微信公众号:yuzhitc】
向TA提问
展开全部

HTML5用canvas实现动画效果举例:

1、定义动画按钮

<div id="controls">

<input id="animateButton" type="button" value="动画开始">

</div>

2、定义页面的canvas布局

<canvas id="canvas" width="750" height="500">

</canvas>

3、通过js脚本来控制动画:

var canvas = document.getElementById('canvas'),

context = canvas.getContext('2d'),

paused = true,

discs = [

x: 150,

y: 250,

lastX: 150,

lastY: 250,

velocityX: -3.2,

velocityY: 3.5,

radius: 25,

innerColor: 'rgba(255,255,0,1)',

middleColor: 'rgba(255,255,0,0.7)',

outerColor: 'rgba(255,255,0,0.5)',

strokeStyle: 'gray',

},


x: 50,

y: 150,

lastX: 50,

lastY: 150,

velocityX: 2.2,

velocityY: 2.5,

radius: 25,

innerColor: 'rgba(100,145,230,1.0)',

middleColor: 'rgba(100,145,230,0.7)',

outerColor: 'rgba(100,145,230,0.5)',

strokeStyle: 'blue'

},


x: 150,

y: 75,

lastX: 150,

lastY: 75,

velocityX: 1.2,

velocityY: 1.5,

radius: 25,

innerColor: 'rgba(255,0,0,1.0)',

middleColor: 'rgba(255,0,0,0.7)',

outerColor: 'rgba(255,0,0,0.5)',

strokeStyle: 'orange'

},

],

numDiscs = discs.length,

animateButton = document.getElementById('animateButton');


// Functions.....................................................


function drawBackground() {

var STEP_Y = 12,

i = context.canvas.height;

context.strokeStyle = 'lightgray';

context.lineWidth = 0.5;


while(i > STEP_Y*4) {

context.beginPath();

context.moveTo(0, i);

context.lineTo(context.canvas.width, i);

context.stroke();

i -= STEP_Y;

}


context.save();


context.strokeStyle = 'rgba(100,0,0,0.3)';

context.lineWidth = 1;


context.beginPath();


context.moveTo(35,0);

context.lineTo(35,context.canvas.height);

context.stroke();


context.restore();

}


function update() {

var disc = null;


for(var i=0; i < numDiscs; ++i) {

disc = discs[i];


if (disc.x + disc.velocityX + disc.radius > context.canvas.width ||

disc.x + disc.velocityX - disc.radius < 0) 

disc.velocityX = -disc.velocityX;


if (disc.y + disc.velocityY + disc.radius > context.canvas.height ||

disc.y + disc.velocityY - disc.radius  < 0) 

disc.velocityY= -disc.velocityY;


disc.x += disc.velocityX;

disc.y += disc.velocityY;

}

}

//动画开始

function draw() {

var disc = discs[i];


for(var i=0; i < numDiscs; ++i) {

disc = discs[i];


gradient = context.createRadialGradient(disc.x, disc.y, 0,

disc.x, disc.y, disc.radius);


gradient.addColorStop(0.3, disc.innerColor);

gradient.addColorStop(0.5, disc.middleColor);

gradient.addColorStop(1.0, disc.outerColor);


context.save();

context.beginPath();

context.arc(disc.x, disc.y, disc.radius, 0, Math.PI*2, false);

context.fillStyle = gradient;

context.strokeStyle = disc.strokeStyle;

context.fill();

context.stroke();

context.restore();

}

}


// 动画开始,执行绘制背景drawBackground,更新切换update,画笔绘制draw三个步骤


function animate(time) {

if (!paused) {

context.clearRect(0,0,canvas.width,canvas.height);

drawBackground();

update();

draw();


window.requestNextAnimationFrame(animate);

}

}

//初始化开始


context.font = '48px Helvetica'; //定义字体


//开始动画点击事件

animateButton.onclick = function (e) {

paused = paused ? false : true;

if (paused) { //如果是停止状态,把文本且化成开始动画

animateButton.value = 'Animate';

}

else { //否则如果是运动状态,把文本且化成停止动画

window.requestNextAnimationFrame(animate);

animateButton.value = 'Pause';

}

};

4、运行效果:

秋秋
2024-11-01 广告
AI群答汇小程序,可以免费生成文案,智能问答,回答问题简单快捷,积极探索面向普通人的AI工具,向广大的普通人群提供简洁高效,即用的免费多模型人工智能(AI)问答服务.进入微信小程序即可免费使用... 点击进入详情页
本回答由秋秋提供
人啦哈w
2016-07-21 · 知道合伙人软件行家
人啦哈w
知道合伙人软件行家
采纳数:3947 获赞数:19705

向TA提问 私信TA
展开全部
使用HTML5画布能够帮助我们快速实现简单的动画效果,基本原理如下:
首先是绘制图形的方法,如下:
function myAnimation() {
ctx.clearRect(0, 0, canvas_size_x, canvas_size_y);

if (x_icon < 0 || x_icon > canvas_size_x - size_x) {
stepX = -stepX;
}

if (y_icon < 0 || y_icon > canvas_size_y - size_y) {
stepY = -stepY;
}

x_icon += stepX;
y_icon += stepY;

ctx.drawImage(anim_img, x_icon, y_icon);
}

以上方法每隔一定时间清除画布内容,并且重新计算绘制图形位置,一旦超过了画布大小,则反转坐标绘制图形。
下面是实际绘制图形方法:
function draw() {
var canvas = document.getElementById("canvas");
ctx = canvas.getContext("2d");

anim_img = new Image(size_x, size_y);

anim_img.onload = function() {
setInterval('myAnimation()', 5);
}

anim_img.src = 'http://www./.com/gb/networks/avatars/80x8013d6393f-a44c-4180-8cb6-7bf0e4776283.png';
}

以上方法将图形定义,并且调用实际绘制动画的方法,搞定!
如果大家对于HTML5绘制动画有兴趣,或者希望了解如何模拟物理动画效果,请阅读下面的互动教程,相信能够帮助你更好理解HTML画布:
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
纯洁的小树
2016-07-21 · TA获得超过3386个赞
知道大有可为答主
回答量:2536
采纳率:71%
帮助的人:456万
展开全部
写个函数,不断绘图。。。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(1)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式