zoukankan      html  css  js  c++  java
  • 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>
  • 相关阅读:
    java 的 线程池应用和实践
    拦截信息短信息并转发到指定手机
    分享 UC优视 的android程序员面试题
    解释通讯协议中的xml
    设计模式工厂模式
    MongoDB基础教程系列第一篇 进入MongoDB世界
    Docx组件读写Word文档介绍
    [转]Oracle数据库逻辑增量备份之exp/imp
    JSON文件读取
    JAVA综合--如何掌握JDK1.5枚举类型[转]
  • 原文地址:https://www.cnblogs.com/suxiaoxia/p/7190540.html
Copyright © 2011-2022 走看看