canvas动画部分
requestAnimationFrame(callback)
一个用于制作逐帧动画的函数
//这个函数会在控制台无限输出"----"
(function animate() {
requestAnimationFrame(animate);
console.log("----");
})();
ctx.arc(100,100,40,0,Math.PI*2,false);
ctx.stroke();
(function animate() {
requestAnimationFrame(animate);
//在同一个坐标无限循环画一个圆
//重新定义开始坐标,试着注释掉这一行看看效果有何不同
ctx.beginPath();
ctx.arc(100,100,40,0,Math.PI*2,false);
ctx.stroke();
})();
很多圆叠加在一起,尝试修改位置:
//初始化坐标
let x = 100;
let y = 100;
(function animate() {
requestAnimationFrame(animate);
//重新定义开始坐标,试着注释掉这一行看看效果有何不同
ctx.beginPath();
ctx.arc(x,y,40,0,Math.PI*2,false);
ctx.stroke();
//动态修改坐标
x += 1;
y += 1;
})();
前面的圆没有清除,所以需要每次都清除画布,使用橡皮擦函数 clearRect(x坐标,y坐标,宽度,高度):
let x = 100;
let y = 100;
(function animate() {
requestAnimationFrame(animate);
//这是我们加入的橡皮擦函数
ctx.clearRect(0,0,innerWidth,innerHeight);
ctx.beginPath();
ctx.arc(x,y,40,0,Math.PI*2,false);
ctx.stroke();
x += 1;
y += 1;
})();
圆在动,但是超出范围就看不到了,制作弹性效果
//我把参数都设为变量
let x = Math.random()*innerWidth;// 横坐标
let y = Math.random()*innerHeight;// 纵坐标
let r = Math.random()*40; // 半径
let dx = Math.random()*6; // 横向平移距离
let dy = Math.random()*6; // 纵向平移距离
(function animate() {
requestAnimationFrame(animate);
ctx.clearRect(0,0,innerWidth,innerHeight);
ctx.beginPath();
ctx.arc(x,y,r,0,Math.PI*2,false);
ctx.stroke();
//当触及边界时进行反弹
// 当触及边界时
if(x+r>innerWidth || x-r<0) {
dx=-dx;
}
if(y+r>innerHeight || y-r<0) {
dy=-dy;
} x += dx;
y += dy;
})();
实现多个圆:
//圆的数组
let circleArray = [];
//循环制造不同的圆,存进数组
for(let i=0;i<100;i++){
let x = Math.random()*innerWidth;// 横坐标
let y = Math.random()*innerHeight;// 纵坐标
let r = Math.random()*40; // 半径
let dx = Math.random()*6; // 横向平移距离
let dy = Math.random()*6; // 纵向平移距离
circleArray.push(new Circle(x,y,r,dx,dy));
} // 创建一个Circle对象
function Circle(x,y,r,dx,dy) {
this.x = x;
this.y = y;
this.r = r;
this.dx = dx;
this.dy = dy; // 绘制圆
this.draw = function() {
ctx.beginPath();
ctx.arc(x,y,r,0,Math.PI*2,false);
ctx.stroke();
}
// 更新圆的位置
this.update = function() {
x+=dx;
y+=dy;
// 当触及边界时
if(x+r>innerWidth || x-r<0) {
dx=-dx;
}
if(y+r>innerHeight || y-r<0) {
dy=-dy;
}
// 每一次更新都要重新在一个新的地方绘制圆
this.draw();
}
} // 这个函数会在控制台无限输出"canvas"
function animate() {
requestAnimationFrame(animate);
// 橡皮擦函数 clearRect(x坐标,y坐标,宽度,高度)
ctx.clearRect(0,0,innerWidth,innerHeight);
// 循环刷新每个圆
for(let i=0;i<circleArray.length;i++){
circleArray[i].update();
}
}
animate();
canvas动画部分的更多相关文章
- 2015.4.23 贪吃蛇、canvas动画,各种上传工具,url信息匹配以及最全前端面试题等
1.面向对象贪吃蛇 2.css中:hover 改变图片 页面加载完 第一次鼠标移入会闪一下 这是为啥? 解决方法:你把两张图合成一张图或者是先把图片加载到页面上,然后再hover出来. 解析:图片 ...
- HTML动画分类 HTML5动画 SVG库 SVG工具 Canvas动画工具
1.js配合传统css属性控制,可以使用setTimeout或者高级的requestAnimationFrame 2.css3 3.svg 4.canvas(当然,这个还是要配合js) 也许这么 ...
- 7 个顶级的 HTML5 Canvas 动画赏析
HTML5确实是一项改革浏览器乃至整个软件行业的新技术,它可以帮助我们Web开发者很方便地在网页上实现动画特效,而无需臃肿的Flash作为支撑.本文分享7个顶级的HTML5 Canvas 动画,都有非 ...
- 8个经典炫酷的HTML5 Canvas动画欣赏
HTML5非常强大,尤其是Canvas技术的应用,让HTML5几乎可以完成所有Flash能完成的效果.本文精选了8个经典炫酷的HTML5 Canvas动画欣赏,每一个都提供全部的源代码,希望对你有所帮 ...
- 7个惊艳的HTML5 Canvas动画效果及源码
HTML5非常强大,尤其是现在大部分浏览器都支持HTML5和CSS3,用HTML5制作的动画也多了起来.另外,Canvas上绘制图形非常简单,本文就分享了一些强大的HTML5 Cnavas动画,一起来 ...
- 《FLASH CC 2015 CANVAS 中文教程》——1、导出canvas动画,文件结构浅析
注::如果你对 FLASH 这个软件操作不够熟悉,建议你可以先看看FLASH动画之类的书. :FLASH CC 在文中直接简称为CC. :以下所以文章中所说的快捷键 如果你按了不起作用,请检查是否有其 ...
- Html5 Canvas动画旋转的小方块;
<!DOCTYPE html> <html> <head> <meta charset="utf-8"> <meta http ...
- 【原创】测试不同浏览器播放canvas动画的平滑程度
Canvas无疑是HTML5开放式网络平台最激动人心的技术之一.目前,除了IE8以外,各类浏览器的新版本都支持HTML5 Canvas. 程序员需要通过Javascript调用Canvas API.基 ...
- HTML5 Canvas动画效果演示
HTML5 Canvas动画效果演示 主要思想: 首先要准备一张有连续帧的图片,然后利用HTML5 Canvas的draw方法在不同的时间 间隔绘制不同的帧,这样看起来就像动画在播放. 关键技术点: ...
- HTML5 Canvas动画效果演示 - 流浪的鱼 - 博客频道 - CSDN.NET
HTML5 Canvas动画效果演示 - 流浪的鱼 - 博客频道 - CSDN.NET HTML5 Canvas动画效果演示
随机推荐
- 【Java】java运行jar时,报 java.lang.UnsupportedClassVersionError
问题现象: java运行jar时,报 java.lang.UnsupportedClassVersionError java -jar main.jar -h 192.168.221.171 - ...
- jQuery中的100个技巧(译)
1.当document文档就绪时执行JavaScript代码. 我们为什么使用jQuery库呢?原因之一就在于我们可以使jQuery代码在各种不同的浏览器和存在bug的浏览器上完美运行. <sc ...
- Map map=new HashMap()
Map是接口,hashMap是Map的一种实现.接口不能被实例化.Map map=new HashMap(); 就是将map实例化成一个hashMap.这样做的好处是调用者不需要知道map具体的实现, ...
- ASP.NET Core WebAPI中使用JWT Bearer认证和授权
目录 为什么是 JWT Bearer 什么是 JWT JWT 的优缺点 在 WebAPI 中使用 JWT 认证 刷新 Token 使用授权 简单授权 基于固定角色的授权 基于策略的授权 自定义策略授权 ...
- linux 权限详解
转载自博客园: http://www.cnblogs.com/123-/p/4189072.html 用户组 在linux中的每个用户必须属于一个组,不能独立于组外.在linux中每个文件有所有者.所 ...
- Window环境配置Mongodb
Mongodb这几天也了解了一下,今天配置了下环境,从今天开始学下Mongodb数据库. 一.下载 在这个网址中选择要下载的开发环境https://www.mongodb.com/download-c ...
- vs中插件影响代码自动创建后台事件问题
CSS Tools 启用之后会影响代码自动创建后台事件,禁用之后解决.禁用之后鼠标悬浮不能看图片,颜色也不能展示
- WPF Trigger for IsSelected in a DataTemplate for ListBox items
<DataTemplate DataType="{x:Type vm:HeaderSlugViewModel}"> <vw:HeaderSlugView /> ...
- Jsp&Servlet入门级项目全程实录第5讲
惯例广告一发,对于初学真,真的很有用www.java1234.com,去试试吧! 1.修改功能实现 dao public int gradeAdd(Connection con,Grade grade ...
- 最长公共子序列(DP)
Description 一个给定序列的子序列是在该序列中删去若干元素后得到的序列.确切地说,若给定序列 X = { x1,x2,…,xm },则另一序列Z ={ z1,z2,…,zk },X 的子序列 ...