1500字范文,内容丰富有趣,写作好帮手!
1500字范文 > HTML5 Canvas draw方法制作动画效果示例

HTML5 Canvas draw方法制作动画效果示例

时间:2022-05-05 03:24:28

相关推荐

HTML5 Canvas draw方法制作动画效果示例

今天给大家分享的是由小编精心为您推荐的HTML5 Canvas draw方法制作动画效果示例,喜欢的朋友可以分享一下,也算是给小编一份支持,大家都不容易啊!

HTML5 Canvas动画效果演示

主要思想:

首先要准备一张有连续帧的图片,然后利用HTML5 Canvas的draw方法在不同的时间间隔绘制不同的帧,这样看起来就像动画在播放。

关键技术点:

JavaScript函数setTimeout()有两个参数,第一个是参数可以传递一个JavaScript方法,

另外一个参数代表间隔时间,单位为毫秒数。代码示例:

setTimeout( update, 1000/30);

Canvas的API-drawImage()方法,需要指定全部9个参数:

(myImage, offw, offh, width,height, x2, y2, width, height);

其中offw, offh是指源图像的起始坐标点,width, height表示源图像的宽与高,x2,y2表

示源图像在目标Canvas上的起始坐标点。

一个22帧的大雁飞行图片实现的效果:

源图像:

程序代码:

代码如下:

!DOCTYPE html

html

head

meta http-equiv="X-UA-Compatible" content="chrome=IE8"

meta http-equiv="Content-type" content="text/html;charset=UTF-8"

titleCanvas Mouse Event Demo/title

link href="default.css" rel="stylesheet" /

script

var ctx = null; // global variable 2d context

var started = false;

var mText_canvas = null;

var x = 0, y =0;

var frame = 0; // 22 5*5 + 2

var imageReady = false;

var myImage = null;

var px = 300;

var py = 300;

var x2 = 300;

var y2 = 0;

= function() {

var canvas = document.getElementById("animation_canvas");

console.log(canvas.parentNode.clientWidth);

canvas.width = canvas.parentNode.clientWidth;

canvas.height = canvas.parentNode.clientHeight;

if (!canvas.getContext) {

console.log("Canvas not supported. Please install a HTML5 compatible browser.");

return;

}

// get 2D context of canvas and draw rectangel

ctx = canvas.getContext("2d");

ctx.fillStyle="black";

ctx.fillRect(0, 0, canvas.width, canvas.height);

myImage = document.createElement(img);

myImage.src = "../robin.png";

myImage.onload = loaded();

}

function loaded() {

imageReady = true;

setTimeout( update, 1000/30);

}

function redraw() {

ctx.clearRect(0, 0, 460, 460)

ctx.fillStyle="black";

ctx.fillRect(0, 0, 460, 460);

// find the index of frames in image

var height = myImage.naturalHeight/5;

var width = myImage.naturalWidth/5;

var row = Math.floor(frame / 5);

var col = frame - row * 5;

var offw = col * width;

var offh = row * height;

// first robin

px = px - 5;

py = py - 5;

if(px -50) {

px = 300;

}

if(py -50) {

py = 300;

}

//var rate = (frame+1) /22;

//var rw = Math.floor(rate * width);

//var rh = Math.floor(rate * height);

(myImage, offw, offh, width, height, px, py, width, height);

// second robin

x2 = x2 - 5;

y2 = y2 + 5;

if(x2 -50) {

x2 = 300;

y2 = 0;

}

(myImage, offw, offh, width, height, x2, y2, width, height);

}

function update() {

redraw();

frame++;

if (frame = 22) frame = 0;

setTimeout( update, 1000/30);

}

/script

/head

body

h1HTML Canvas Animations Demo - By Gloomy Fish/h1

prePlay Animations/pre

div

canvas/canvas

/div

/body

/html

发现上传透明PNG格式有点问题,所以我上传不透明的图片。可以用其它图片替换,替换以后请修改最大帧数从22到你的实际帧数即可运行。

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。