canvas sprite动画 简单封装

时间:2021-12-31 21:52:17
 1 function SpritCtx(img, size, pos, turnTime, totalCount, ctx) {
 2     size = size || {};
 3     pos = pos || {};
 4     //img
 5     this.img = img;
 6     //size
 7     this.width = size.width || 5;
 8     this.height = size.height || 5;
 9     //pos
10     this.left = pos.left || 0; //画布上的位置left
11     this.top = pos.top || 0; //画布上的位置top
12     //初始化cellNum,count,cell,row
13     this.cellNum = 1;
14     var that = this;
15     this.img.onload = function() {
16         that.cellNum = Math.floor(that.img.width / that.width); //每行的个数            
17     }
18     this.count = 0; //显示第几个
19     this.cell = 0;
20     this.row = 0;
21     //定时器时间
22     this.turnTime = turnTime || 90;
23     //图片数量
24     this.totalCount = totalCount;
25     //canvas
26     this.ctx = ctx;
27     //定时器
28     this.xTimer = null;
29 }
30 
31 SpritCtx.prototype.draw = function() {
32     this.ctx.drawImage(
33         this.img,
34         this.width * this.cell,
35         this.height * this.row,
36         this.width,
37         this.height,
38         this.left,
39         this.top,
40         this.width,
41         this.height
42     );
43     return this;
44 };
45 
46 SpritCtx.prototype.start = function() {
47     var that = this;
48     clearInterval(this.xTimer);
49     this.xTimer = setInterval(function () {
50         that.timerFn();
51     }, this.turnTime);
52     return this;
53 };
54 
55 SpritCtx.prototype.stop = function() {
56     clearInterval(this.xTimer);
57     return this;
58 };
59 
60 SpritCtx.prototype.timerFn = function() {
61     this.count++;
62     this.count %= this.totalCount;
63     this.row = Math.floor(this.count / this.cellNum); //第几行
64     this.cell = this.count - this.row * this.cellNum; //第几列
65     return this;
66 };
67 
68 SpritCtx.prototype.turnPos = function(left, top) {
69     this.left = left || 0;
70     this.top = top || 0;
71     return this;
72 };