Html5 序列帧动画

<!DOCTYPE html>

<html lang="en" xmlns="http://www.w3.org/1999/xhtml">
<head>
    <meta charset="utf-8" />
    <title>物联网金融</title>
    <style>
        * {
            margin: 0;
            padding: 0;
        }

        html, body {
            height: 100%;
            width: 100%;
        }

        canvas {
            display: block;
        }
    </style>
</head>
<body>
    <audio id="myBJAudio" controls preload="auto" autoplay loop style="display: none" src="SceneTwo/BJ.mp3">
        Your browser does not support the audio element.
    </audio>
    <audio id="myLockAudio" controls preload="auto" style="display: none" src="SceneTwo/LOCK.wav">
        Your browser does not support the audio element.
    </audio>
    <canvas id="canvas">
        <p>Your browser does not support the canvas element!</p>
    </canvas>
    <script type="text/javascript">
        var canvas;//画布

        var SceneSwitch = 1;//动画选择
        var FrameSecond = 60;//更新时间(毫秒)
        var AnimController;//动画控制

        //定义5个动画
        var Anim1,Anim2,Anim3,Anim4,Anim5;

        //动画控制函数
        function Controller(){
            switch(SceneSwitch){
                case 1:
                    Anim3.Draw();
                    break;
                case 2:
                    Anim3.Draw();
                    Anim1.Draw();
                    break;
                case 3:
                    Anim3.Draw();
                    Anim1.Draw();
                    Anim2.Draw();
                    break;
                case 4:
                    Anim1.Draw();
                    Anim2.Draw();
                    Anim3.Draw();
                    Anim4.Draw();
                    break;
                default:
                    Anim5.Draw();
                    break;
            }

            //不断刷新
            AnimController = setTimeout("Controller()",FrameSecond);
        }

        window.onload = function () {
            canvas = document.getElementById("canvas");
            canvas.width = document.body.clientWidth;
            canvas.height = document.body.clientHeight;

            //绘制背景
            DrawBackground();

            //实例化动画对象
            Anim1 = new PicAnim("SceneOne/ShangHai/",1,74,20,0,2720,canvas.height);
            //初始化+启用循环(24帧到74帧循环)
            Anim1.Init().SetLoop(true,24,74);

            Anim2 = new PicAnim("SceneOne/Dollor/",1,64,Anim1.X+Anim1.Width,0,1000,canvas.height);
            Anim2.Init().SetLoop(false);

            //设置下一个动画
            Anim1.Next = Anim2;

            Anim3 = new PicAnim("SceneOne/BallX/",1,161,Anim2.X+Anim2.Width,0,3200,canvas.height);
            Anim3.Init().SetLoop(false);

            Anim4 = new PicAnim("SceneOne/Map/",1,52,Anim3.X+Anim3.Width,0,2600,canvas.height);
            Anim4.Init().SetLoop(false);

            Anim5 = new PicAnim("SceneTwo/Pictures/IMG",1,2500,0,0,canvas.width,canvas.height);
            Anim5.Init().SetLoop(true,2200,2500);
            Anim5.LoopType = 2;//循环方式,1双向循环,2单向循环
            Anim5.Width = canvas.width;//设置画面宽度
            Anim5.HasBack = true;//是否有背景,如果有则不会调用背景绘制函数
            Anim5.Format=2;//设置文件命名格式
            Anim5.Extenes = ".jpg";//序列帧后缀名
            Anim5.Keys.push(250);//关键帧,到帧停止,S键再次启动

            //启动动画控制
            AnimController = setTimeout("Controller()",FrameSecond);
        }

        //动画对象,路径、第一张图片名,最后一张图片名,x轴,y轴,宽度,高度
        //*图片都是通过数字进行顺序命名
        function PicAnim(path,min,max,x,y,w,h){
            this.Path = path;
            this.Index = min;
            this.MinIndex = min;
            this.MaxIndex = max;
            this.X = x;
            this.Y = y;
            this.Width = w;
            this.Height = h;
            this.Extenes = ".png";
            this.Format = 1;
            this.Picture = new Image();
            this.Loading = false;
            this.Drawed = true;
            this.HasBack = false;
            this.IsLoop = false;
            this.LoopBegin = min;
            this.LoopEnd = max;
            this.LoopType = 1;
            this.Keys = new Array();
            var loopDir = 1;

            var obj = this;

            this.Init = function(){
                obj.Height = canvas.height;
                obj.Width = canvas.width/10240*obj.Width;
                return obj;
            }

            this.SetLoop = function(loop,loopBegin,loopEnd){
                obj.IsLoop = loop;
                obj.LoopBegin = loopBegin;
                obj.LoopEnd = loopEnd;
                return obj;
            }

            this.Next = null;
            var isNextStart = false;

            this.Draw = function(){
                if(obj.Drawed){
                    obj.Drawed = false;
                    if(obj.Format!=1){
                        obj.Picture.src = obj.Path+obj.Index+obj.Extenes;
                    }else{
                        obj.Picture.src = obj.Path+"("+obj.Index+")"+obj.Extenes;
                    }
                    obj.Picture.onload = function(){
                        var context = canvas.getContext("2d");

                        if(!obj.HasBack)
                            DrawAreaBack(obj.X,obj.Y,obj.Width,obj.Height);

                        context.drawImage(obj.Picture,obj.X,obj.Y,obj.Width,obj.Height);

                        if(false==isNextStart&&null!=obj.Next&&obj.Index>=obj.MaxIndex){
                            isNextStart=true;
                            SceneSwitch++;
                        }

                        if(obj.IsLoop){
                            obj.Index+=loopDir;

                            //Begin 场景2 跳帧专用
                            if (obj.Index == 1160)
                                document.getElementById("myLockAudio").play();
                            if(obj.Index>1360&&obj.Index<2490)
                                obj.Index+=2;
                            //End

                            if(obj.Index>=obj.LoopEnd){
                                if(obj.LoopType==1)
                                    loopDir = -1;
                                else
                                    obj.Index=obj.LoopBegin;
                            }
                            else if(obj.Index<=obj.LoopBegin)
                                loopDir = 1;
                        }else{
                            obj.Index++;

                            if(obj.Index>obj.MaxIndex){
                                obj.Index = obj.MaxIndex;
                            }
                        }

                        if(obj.Keys.length>0){
                            var i=0;
                            for(;i<obj.Keys.length;i++){
                                if(obj.Keys[i]==obj.Index)
                                    break;
                            }

                            if(i<obj.Keys.length)
                                obj.Drawed=false;
                            else
                                obj.Drawed=true;
                        }else{
                            obj.Drawed = true;
                        }
                    }
                }
            }
        }

        function DrawBackground() {
            DrawAreaBack(0,0,canvas.width,canvas.height);
        }

        function DrawAreaBack(x,y,w,h){
            var context = canvas.getContext("2d");
            var linearGradient1 = context.createLinearGradient(0, canvas.height, 0, 0);
            linearGradient1.addColorStop(0, ‘rgb(0, 7, 17)‘);
            linearGradient1.addColorStop(0.5, ‘rgb( 3, 26, 60)‘);
            context.fillStyle = linearGradient1;
            context.fillRect(x, y, w, h);
        }

        window.onkeydown = disableRefresh;
        function disableRefresh(evt) {
            evt = (evt) ? evt : window.event
            if (evt.keyCode) {
                if (evt.keyCode == 83) {
                    if(SceneSwitch<5)
                        SceneSwitch++;
                    else{
                        Anim5.Index = Anim5.Keys[0]+1;
                        Anim5.Drawed = true;
                    }
                }
            }
        }
    </script>
</body>
</html>
时间: 2024-10-12 16:09:29

Html5 序列帧动画的相关文章

unity shader序列帧动画代码,顺便吐槽一下unity shader系统

http://www.cnblogs.com/hellohuan/archive/2014/01/10/3512784.html 一.看到UNITY论坛里有些人求unity shader序列帧动画,写shader我擅长啊,就顺势写了个CG的shader.代码很简单,就是变换UV采样序列帧贴图,美术配置行数列数以及变换速度. Shader "HELLOHUAN/Hello_Sequence" { Properties { _Color ("Main Color", C

Quick cocos2dx-Lua(V3.3R1)学习笔记(六)----让精灵动起来吧,使用序列帧动画

光有精灵太死板了,游戏里面肯定有不同的动画,难道人物走动,一张静态图就能打发对游戏质量要求越来越高的玩家么?所以我们要让精灵动起来 quick里面提供了使用序列帧动画的函数,我们直接使用就行了 现将大图载入缓存中,然后提取出来用即可 主要就是display,newFrames参数,这个有点string.format的味道 @function [parent=#display] newFrames -- @param string pattern 模式字符串 -- @param integer b

[Cocos2d-x v3.x]序列帧动画

简介 Cocos2d-x中,动画的具体内容是依靠精灵显示出来的,为了显示动态图片,我们需要不停切换精灵显示的内容,通过把静态的精灵变为动画播放器从而实现动画效果.动画由帧组成,每一帧都是一个纹理,我们可以使用一个纹理序列来创建动画. 我们使用Animation类描述一个动画,而精灵显示动画的动作则是一个Animate对象.动画动作Animate是精灵显示动画的动作,它由一个动画对象创建,并由精灵执行. 创建方法 - 手动添加序列帧到Animation类 - 使用文件初始化Animation类 手

iOS开发基础-序列帧动画之Tom猫

新建一个Single View Application,向该工程中导入Tom猫的图片资源,本示例演示Tom猫喝牛奶的动作.图片的名字为 drink_00.jpg.drink_01.jpg.....drink_80.jpg . 向 Main.storyboard 中添加 UIImageView ,将图片 drink_00.jpg 作为默认显示的画面.将该控件与 ViewController 类建立一个 IBOutlet 连接,属性名为: @property (weak, nonatomic) IB

14款超时尚的HTML5时钟动画

时钟动画在网页应用中也非常广泛,在一些个人博客中,我们经常会看到一些相当个性化的HTML5时钟动画.今天我们向大家分享了14款形态各异的超时尚HTML5时钟动画,其中有圆盘时钟.3D时钟.个性化时钟等,强大的HTML5为时钟动画增添了不少精彩,希望能给大家带来帮助. 1.可爱的CSS3圆盘时钟动画 今天要分享的也是一款可爱的CSS3圆盘时钟动画,时钟背景是乳白色的,显得非常干净,另外,时钟也可以和你本地的时候保持同步. 在线演示 源码下载 2.HTML5 SVG圆盘时钟动画 5种时钟样式 今天我

8个华丽的HTML5相册动画欣赏

HTML5的图片动画非常丰富,我们也在网站上分享过很多关于HTML5的图片动画.相册在网络中也十分常见,本文我们要分享一些比较华丽的jQuery/HTML5相册动画,希望大家喜欢. 1.HTML5 3D相册浏览 震撼人心 前几天我刚刚分享过一款HTML5 3D图片插件HTML5 3D立体图片旋转播放展示,确实利用HTML5技术来做各种图片动画都非常炫.今天我们再来看一款HTML5 3D相册浏览应用,图片可以手动播放,也可以自动播放,效果非常震撼,赶紧把这款HTML5 3D相册分享给你的朋友吧.

1-10(退出键盘,设置按钮的背景图,transform属性,imageView序列帧动画,九宫格算法...)

(1-10目录) 1.取得2个文本输入框的值 2.退出键盘 3.设置按钮的背景图 4.执行动画 5.手动创建按钮以及设置按钮的一些基本属性 6 transform属性 7.imageView序列帧动画 8.九宫格算法 9.通过xib创建局部控件,利用模型封装加载数据 10设置状态栏的样式为白色 { 扯淡环节: 工作这么久了, 发现一些细节有时候总是忽略, 现在就把我刚接触时的知识点给整理出来!, 没事自己看看, 也分享给大家! 分享,创造快乐!哈哈 xq每天都生活在快乐当中, 愿你们也是! }

7款让人惊叹的HTML5粒子动画特效

HTML5的很大一个优势就是可以更加便捷高效地制作网页粒子动画特效,特别是Canvas特性,可以实现在网页上绘制任何图形和动画.本文要分享7款让人惊叹的HTML5粒子动画特效,这些粒子特效都提供源代码下载供大家学习. 1.HTML5 Canvas粒子模拟效果 这是一款利用HTML5 Canvas模拟出来的30000个粒子动画,当你用鼠标在canvas画布上移动时,鼠标周围的一些粒子就会跟着你移动,并形成一定的图案,就像你在玩沙画一样,效果非常不错.这里,我们应用了一些HTML5的特性,让这个粒子

7 个顶级的 HTML5 Canvas 动画赏析

HTML5确实是一项改革浏览器乃至整个软件行业的新技术,它可以帮助我们Web开发者很方便地在网页上实现动画特效,而无需臃肿的Flash作为支撑.本文分享7个顶级的HTML5 Canvas 动画,都有非常不错的效果. 1.3D HTML5 Logo动画 HTML5多视角3D旋转动画 HTML5 3D动画实现起来非常方便,之前介绍过基于jQuery的3D旋转插件是利用多张多视角图片播放来实现的,而今天分享的这款HTML5 3D旋转动画是利用纯HTML5技术实现的,该动画实现了HTML5 Logo旋转