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

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

<!DOCTYPE html>

<html>
<head>
<meta charset="utf-8">
<title>requestAnimationFrames</title>
<style media="screen">
canvas {
box-shadow: 0 0 10px black;
margin: 30px;
}
</style>
</head>
<body>

<canvas id="canvas" width="500" height="500">

您的浏览器不支持canvas
</canvas>

</body>

<script type="text/javascript">

// 获取元素和上下文对象

var canvas = document.getElementById('canvas');
var ctx = canvas.getContext('2d');

// 创建小球对象

var ball = {
x: 50,
y: 50,
r: 30,
speedX: 5,
speedY: 3,
draw: function () {
ctx.beginPath();
ctx.arc(this.x, this.y, this.r, 0, Math.PI * 2, false);
ctx.closePath();
ctx.fill();
},
move: function () {
this.x += this.speedX;
this.y += this.speedY;

if (this.x >= 500 - this.r || this.x <= this.r) { this.speedX *= -1; }

if (this.y >= 500 - this.r || this.y <= this.r) { this.speedY *= -1; }
}
};

// 通过定时器,让小球进行移动

// setInterval(function () {
// ctx.clearRect(0, 0, 500, 500);
//
// // 移动小球,然后绘制
// ball.move();
// ball.draw();
// }, 100);

// function gameloop() {
// ctx.clearRect(0, 0, 500, 500);
// ball.move();
// ball.draw();
//
// // 使用timeout实现interval的功能,实际上就是自己调用自己
// setTimeout(gameloop, 10);
// }
// gameloop();

var a = null;
function gameloop() {

ctx.clearRect(0, 0, 500, 500);

ball.move();
ball.draw();

// requestAnimationFrame 使用帧,进行动画效果,保证每隔一帧执行一次

// 两次执行中间的时间间隔不确定,又电脑性能来决定
// 如果使用帧动画,需要注意: 利用 取余运算 进行时间的选取,称为每隔多少帧执行一次
// 取消动画的方式和 interval 、 timeout 一样,都有单独的方法,都有把返回值做参数
a = window.requestAnimationFrame(gameloop);
}
gameloop();

// 取消帧动画

document.onclick = function () {
window.cancelAnimationFrame(a);
};

 

</script>
</html>

转载于:https://www.cnblogs.com/csw1364115877/p/6115543.html

你可能感兴趣的文章
基于机器学习的web异常检测——基于HMM的状态序列建模,将原始数据转化为状态机表示,然后求解概率判断异常与否...
查看>>
虚拟运营商10月或大面积放号 哭穷背后仍有赢家
查看>>
分布式光伏发电建设中的逆变器及其选型
查看>>
UML中关联,组合与聚合等关系的辨析
查看>>
《大数据管理概论》一3.2 大数据存储与管理方法
查看>>
ios的google解析XML框架GDataXML的配置及使用
查看>>
netty-当一个客户端连接到来的时候发生了什么
查看>>
PHP_5.3.20 源码编译安装PHP-FPM
查看>>
在51CTO三年年+了,你也来晒晒
查看>>
js控制图片等比例缩放
查看>>
Java高级开发工程师面试考纲
查看>>
FreeMarker表达式
查看>>
Debian9.2 下使用vnstat查看服务器带宽流量统计
查看>>
NGINX + PHP-FPM 502
查看>>
Openstack API常用命令
查看>>
OpenSSL漏洞凶猛来袭 慧眼恶意代码监测应对有方
查看>>
C语言 喝汽水问题
查看>>
ubuntu 下安装 mysql
查看>>
关于k-means聚类算法的matlab实现
查看>>
一键安装Gitlab后的备份、迁移与恢复
查看>>