博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
canvas requestAnimationFrame 动画
阅读量:5990 次
发布时间:2019-06-20

本文共 2070 字,大约阅读时间需要 6 分钟。

hot3.png

如果你想做逐帧动画的时候,你应该用这个方法。这就要求你的动画函数执行会先于浏览器重绘动作。通常来说,被调用的频率是每秒60次,但是一般会遵循W3C标准规定的频率。如果是后台标签页面,重绘频率则会大大降低。

 

var canvas=document.getElementById("canvas");    var ctx=canvas.getContext('2d');    var running=false;//    get requestAnimationFrame    function AFrame(callback){        return window.requestAnimationFrame = window.requestAnimationFrame || window.mozRequestAnimationFrame || window.webkitRequestAnimationFrame || window.msRequestAnimationFrame;    }    var raFrame=AFrame();    var raf;    var ball={        x:100,        y:100,        vx:5,        vy:1,        radius:25,        color:'blue',        draw:function(){            ctx.beginPath();            ctx.arc(this.x,this.y,this.radius,0,Math.PI*2,true);            ctx.closePath();            ctx.fillStyle=this.color;            ctx.fill();        }    };    function  clear(){        ctx.fillStyle=ctx.fillStyle = 'rgba(255,255,255,0.3)';        ctx.fillRect(0,0,canvas.width,canvas.height);    }    function draw(){//        ctx.fillStyle = 'rgba(255,255,255,0.3)';//        ctx.fillRect(0,0,canvas.width,canvas.height);//      ctx.clearRect(0,0,canvas.width,canvas.height);//每次画之前清除上一次的        clear();        ball.draw();        ball.x += ball.vx;        ball.y += ball.vy;        if (ball.y + ball.vy > canvas.height || ball.y + ball.vy < 0) {            ball.vy = -ball.vy;        }        if (ball.x + ball.vx > canvas.width || ball.x + ball.vx < 0) {            ball.vx = -ball.vx;        }       raf= raFrame(draw);        console.log("运行")    }    canvas.addEventListener('mousemove',function(e){        if(!running){            clear();            ball.x = e.clientX;            ball.y = e.clientY;            ball.draw();        }//        raf=raFrame(draw);    });    canvas.addEventListener("click",function(e){        if (!running) {            raf=raFrame(draw);            running = true;        }    });    canvas.addEventListener('mouseout',function(e){        window.cancelAnimationFrame(raf);        running = false;    });    ball.draw();

转载于:https://my.oschina.net/swmhxhs/blog/1490483

你可能感兴趣的文章
DirectX编程:C#中利用Socket实现网络语音通信[初级版本]
查看>>
[项目过程中所遇到的各种问题记录]目录索引以及简单介绍
查看>>
【转】IOS开发中图片资源使用png还是jpg格式
查看>>
Java:静态导入
查看>>
iOS:核心动画之动画组CAAnimationGroup
查看>>
JS:实用功能
查看>>
Interface继承至System.Object?
查看>>
JSP 执行流程
查看>>
微软Ignite大会我的Session(SQL Server 2014 升级面面谈)PPT分享
查看>>
XAMPP 在windows下无法启动Apache解决方案
查看>>
OTA(空中下载技术)
查看>>
JAVA设计模式之【观察者模式】
查看>>
Jquery Uploadify插件+Servlet解决FTP多文件上传
查看>>
由 12306.cn 谈谈高并发+高负载网站性能技术
查看>>
WF(9):本地服务之事件处理
查看>>
第 2 章 软件工程 (Software Engineering)
查看>>
Struts 动态Form的验证框架步骤
查看>>
C# 用delegate实现AOP事务[C# | AOP | delegate]
查看>>
hadoop搭建注意事项汇总
查看>>
SpringMVC怎么获取前台传来的数组
查看>>