03 canvas帧动画封装案例

sprite.js

/**
 * Created by suxiaoxia on 2017/7/15.
 */
function sprite(option) {
    this._init(option);
}
sprite.prototype = {
    /*初始化*/
    _init:function (option) {
        this.x = option.x || 0;
        this.y = option.y || 0;

        this.w = option.w || 40;
        this.h = option.h || 65;

        this.fps = option.fps || 10;
        this.originW = option.originW || 40;
        this.originH = option.originH || 65;

        this._dirIndex = 0;
        this._imgSrc = option.imgSrc || ‘‘;
    },
    render:function (ctx) {
        var img = new Image();
        img.src = this._imgSrc;
        var self = this;
        img.onload = function () {
            var frameIndex = 0;
            setInterval(function () {
                ctx.clearRect(0,0,ctx.canvas.width,ctx.canvas.height);
                ctx.drawImage(
                    img,
                    frameIndex*self.originW,
                    self._dirIndex*self.originH,
                    self.originW,
                    self.originH,
                    self.x,
                    self.y,
                    self.w,
                    self.h
                );
                frameIndex++;
                frameIndex %= 4;
            },1000/self.fps)
        }
    },
    changeDir:function (dir) {
        if (dir == ‘left‘){
            this._dirIndex = 1;
        }
        if (dir == ‘right‘){
            this._dirIndex = 2;
        }
        if (dir == ‘up‘){
            this._dirIndex = 3;
        }
        if (dir == ‘down‘){
            this._dirIndex = 0;
        }
    }
};

index.html

<head>
    <meta charset="UTF-8">
    <title>Title</title>
    //引入sprite.js文件
    <script src="sprite.js"></script>
</head>
<body>
    <div>
        <canvas id="canvas">
            你的浏览器不支持canvas,请升级浏览器
        </canvas>
    </div>
    <button id="btn-dir-left">←</button>
    <button id="btn-dir-right">→</button>
    <button id="btn-dir-up">↑</button>
    <button id="btn-dir-down">↓</button>

    <script>
        (function () {
            var canvas = document.querySelector("#canvas");
            var ctx = canvas.getContext(‘2d‘);

            canvas.width = 600;
            canvas.height = 600;
            canvas.style.border = "1px solid #000";

            var s = new sprite({
                x:300,
                y:300,
                w:80,
                h:65*2,
                fps:4,
                originW:40,
                originH:65,
                imgSrc:‘../img_a/DMMban.png‘
            });
            s.render(ctx);
            //绑定按钮的点击事件
            var btnLeft = document.getElementById(‘btn-dir-left‘);
            btnLeft.onclick = function() {
                s.changeDir(‘left‘);
            };

            var btnRight = document.getElementById(‘btn-dir-right‘);
            btnRight.onclick = function() {
                s.changeDir(‘right‘);

            };

            var btnUp = document.getElementById("btn-dir-up");
            btnUp.onclick = function() {
                s.changeDir(‘up‘);

            };

            var btnDown = document.getElementById(‘btn-dir-down‘);
            btnDown.onclick = function() {
                s.changeDir(‘down‘);

            };
        })();
    </script>
</body>
时间: 2024-10-09 07:17:53

03 canvas帧动画封装案例的相关文章

JS——缓慢动画封装案例

手风琴 1.排他思想 2.ul宽度需要大一点,防止li撑开跑下去 3.一个变大其他所有变小,变小不能太小,不然会出现空白 <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Title</title> <style> * { padding: 0; margin: 0; } div { width

自己定义View时,用到Paint Canvas的一些温故,简单的帧动画(动画一 ,&amp;quot;掏粪男孩Gif&amp;quot;顺便再提提onWindowFocusChanged)

转载请注明出处:王亟亟的大牛之路 之前在绘画的过程中提到了静态的旋转啊,缩放啊,平移等一些效果.那么自己定义的View当然也有动态的效果也就是我们的Animation.经常使用的有三种 View Animation Drawable Animation Property Animation 这一篇讲一下简单的Drawable Animation. Drawable Animation实现好是什么个样子呢? 帧动画,一张一张的图片.一次播形成动画的景象. 效果就是如此,把一帧一帧的图品相机播放,形

强大的CSS3/JS:帧动画的多种实现方式与性能对比

Web动画形式 首先我们来了解一下Web有哪些动画形式 1\. CSS3动画 Transform(变形) Transition(过渡) Animation(动画) 2\. JS动画(操作DOM.修改CSS属性值) 3\. Canvas动画 4\. SVG动画 5\. 以Three.js为首的3D动画 以上各种动画形式都可以制作出一种类型的动画,那就是帧动画,也叫序列帧动画,定格动画,逐帧动画等,这里我们统一用帧动画来表述. 这里推荐一下我的前端学习交流扣qun:767273102 ,里面都是学习

帧动画插件

动画插件封装 最近这段时间一直都在研究关于动画方法的知识,说实话确实不容易,主要还是动画算法这方面比较难,毕竟没学过.当然也有所收获,明白了基本动画的原理是什么,所以自己也封装了一个简单的动画插件来巩固自己所学. 动画插件的实现方式 对于前端来说,主要实现动画的方式就是css(transition , animation),js(setTimeout , setInterval , requestAnimationFrame),canvas,svg等方式,在这里我主要是通过requestAnim

window.requestAnimationFrame() ,做逐帧动画,你值得拥有

window.requestAnimationFrame() 方法告诉浏览器您希望执行动画,并请求浏览器调用指定的函数在下一次重绘之前更新动画.该方法使用一个回调函数作为参数,这个回调函数会在浏览器重绘之前调用. 如果你想做逐帧动画的时候,你应该用这个方法.这就要求你的动画函数执行会先于浏览器重绘动作.通常来说,被调用的频率是每秒60次,但是一般会遵循W3C标准规定的频率.如果是后台标签页面,重绘频率则会大大降低. 基本语法: requestID = window.requestAnimatio

34 帧动画

在res/anim目录下新建文件: <?xml version="1.0" encoding="utf-8"?> <animation-list xmlns:android="http://schemas.android.com/apk/res/android" android:oneshot="true"><!--android:oneshot="true" 只播放一次 fa

帧动画的完整实现: 代码直接演示

帧动画的完整实现: 直接上代码演示更加清晰 1 帧动画完整代码实现: 2 #import "ViewController.h" 3 @interface ViewController () 4 5 @property (weak, nonatomic) IBOutlet UIImageView *imageViewIcon; 6 7 @end 8 9 @implementation ViewController 10 11 //把相同的代码封装一下 12 -(void)beginAni

Android游戏开发研究帧动画实现

 1.动画的原则框架        帧的动画帧的动画顾名思义,画就是帧动画. 帧动画和我们小时候看的动画片的原理是一样的,在同样区域高速切换图片给人们呈现一种视觉的假象感觉像是在播放动画,事实上只是是N张图片在一帧一帧的切换罢了.对摄像头不清楚的请看p=992" rel="bookmark">Android研究之游戏开发摄像头更新        如图所看到的:人物行走动画的实现方式, 4帧行走动画在播放区域 一帧一帧向左切换播放 给人们一种播放动画的假象 .图片就动

Android基础入门教程——8.4.1 Android动画合集之帧动画

Android基础入门教程--8.4.1 Android动画合集之帧动画 标签(空格分隔): Android基础入门教程 本节引言: 从本节开始我们来探究Android中的动画,毕竟在APP中添加上一些动画,会让我们的应用变得 很炫,比如最简单的关开Activity,当然自定义控件动画肯定必不可少啦~而Android中的动画 分为三大类,逐帧动画(Frame)以及补间动画(Tween),还有Android 3.0以后引入的属性动画 (Property),而本节给大家带来的是第一种动画--逐帧动画