上面我们玩了一个图表,大家学好结构,然后在那个基础上去扩展各种图表,慢慢就可以形成自己的图表库了。也可以多看看一些国外的图表库简单的版本,分析分析,读代码对提高用处很大。我说了canvas两大主流用途,一个是图表,一个是游戏,在写游戏项目之前,我们先来点基础,关于动画,没有动画基础讲canvas游戏,就跟你妈让你明年五一结婚而不管你现在有没有女朋友一样不符合逻辑(本人深度受害者)。

运动我主要说一点就好了。

用requestAnimationFrame,别用定时器,别用定时器,别用定时器。

一言不合我们先干一梭子代码玩玩。

<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=0">
<meta name="apple-mobile-web-app-capable" content="yes">
<meta name="apple-mobile-web-app-status-bar-style" content="black">
<title>document</title>
<style>
*{
padding:0;
margin:0;
}
html,body{
width:100%;
height:100%;
overflow: hidden;
}
canvas{
background:#000;
}
span{
font-size: 50px;
}
</style>
<script>
function rnd(n,m){
return parseInt(Math.random()*(m-n)+n);
}
function d2a(n){
return n*Math.PI/180;
} window.onload=function(){
var c=document.getElementsByTagName('canvas')[0];
var W=document.documentElement.clientWidth;
var H=document.documentElement.clientHeight;
c.width=W;
c.height=H;
function draw(){
console.log(rnd(0,100));
//准备画笔
var gd=c.getContext('2d');
gd.fillStyle='#fff';
gd.clearRect(0,0,W,H);
gd.beginPath();
gd.arc(rnd(0,W),rnd(0,H),10,d2a(0),d2a(360),false);
gd.fill();
window.requestAnimationFrame(draw);//这里用递归不然循环不起来,不用担心性能问题,我说没问题就没问题
}
window.requestAnimationFrame(draw); //不处理requesAnimationFrame的兼容性就没法在实际项目中使用,因为兼容性太操蛋了
//使用了一个IIFEs,你不懂也没事 拿过去用就行了
window.requestAnimationFrame = (function(){
return window.requestAnimationFrame ||
window.webkitRequestAnimationFrame ||
window.mozRequestAnimationFrame ||
window.msRequestAnimationFrame ||
function(callback){
window.setTimeout(callback, 1000 / 60);//低版本保险刷新频率
};
})();
};
</script>
</head>
<body>
<canvas width="800" height="500">
<span>你的浏览器不支持canvas</span>
</canvas>
</body>
</html>

注意兼容性,注意递归,其它就无视了。上个小球弹跳的例子。

<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=0">
<meta name="apple-mobile-web-app-capable" content="yes">
<meta name="apple-mobile-web-app-status-bar-style" content="black">
<title>document</title>
<style>
*{
padding:0;
margin:0;
}
html,body{
width:100%;
height:100%;
overflow: hidden;
}
canvas{
}
span{
font-size: 50px;
}
</style>
<script>
function rnd(n,m){
return parseInt(Math.random()*(m-n)+n);
}
function d2a(n){
return n*Math.PI/180;
}
window.onload=function(){
var c=document.getElementsByTagName('canvas')[0];
var W=document.documentElement.clientWidth;
var H=document.documentElement.clientHeight;
c.width=W;
c.height=H;
var posX = 0;
var posY = 0;
var iSpeedX = 8;
var iSpeedY = 8;
function draw(){
console.log(rnd(0,100));
//准备画笔
var gd=c.getContext('2d');
gd.fillStyle='red';
gd.clearRect(0,0,W,H);
gd.beginPath();
posX+= iSpeedX;
posY+= iSpeedY;
if(posX+50>W){//注意arc是从圆心画的所以是50不是100
iSpeedX*=-1;
}
if(posY+50>H){
iSpeedY*=-1;
}
if(posX<50&&iSpeedX!=8){//注意arc是从圆心画的所以是50不是100
iSpeedX*=-1;
}
if(posY<50&&iSpeedY!=8){
iSpeedY*=-1;
}
gd.arc(posX,posY,50,d2a(0),d2a(360),false);
gd.fill();
window.requestAnimationFrame(draw);//这里用递归不然循环不起来,不用担心性能问题,我说没问题就没问题
}
window.requestAnimationFrame(draw); //不处理requesAnimationFrame的兼容性就没法在实际项目中使用,因为兼容性太操蛋了
//使用了一个IIFEs,你不懂也没事 拿过去用就行了
window.requestAnimationFrame = (function(){
return window.requestAnimationFrame ||
window.webkitRequestAnimationFrame ||
window.mozRequestAnimationFrame ||
window.msRequestAnimationFrame ||
function(callback){
window.setTimeout(callback, 1000 / 60);//低版本保险刷新频率
};
})();
};
</script>
</head>
<body>
<canvas width="800" height="500">
<span>你的浏览器不支持canvas</span>
</canvas>
</body>
</html>

不墨迹,收工鸟。下一篇搞一下旋转跳跃,然后写个canvas游戏。

本文转载于:猿2048https://www.mk2048.com/blog/blog.php?id=h1ib2cab0ib

canvas系列教程07-canvas动画基础1的更多相关文章

  1. [js高手之路] html5 canvas系列教程 - 认识canvas以及基本使用方法

    canvas是html5中引入的一个新元素,俗称画布,既然是画布,当然是用来画图的.canvas技术指的是利用javascript操作canvas元素绘制图形的技术,要使用canvas,一定要浏览器支 ...

  2. [js高手之路] html5 canvas系列教程 - 掌握画直线图形的常用API

    我们接着上文[js高手之路] html5 canvase系列教程 - 认识canvas以及基本使用方法继续. 一.直线的绘制 cxt.moveTo( x1, y1 ): 将画笔移动到x1, y1这个点 ...

  3. [js高手之路] html5 canvas系列教程 - 状态详解(save与restore)

    本文内容与路径([js高手之路] html5 canvas系列教程 - 开始路径beginPath与关闭路径closePath详解)是canvas中比较重要的概念.掌握理解他们是做出复杂canvas动 ...

  4. [js高手之路] html5 canvas系列教程 - arcTo(弧度与二次,三次贝塞尔曲线以及在线工具)

    之前,我写了一个arc函数的用法:[js高手之路] html5 canvas系列教程 - arc绘制曲线图形(曲线,弧线,圆形). arcTo: cxt.arcTo( cx, cy, x2, y2, ...

  5. [js高手之路] html5 canvas系列教程 - arc绘制曲线图形(曲线,弧线,圆形)

    绘制曲线,经常会用到路径的知识,如果你对路径有疑问,可以参考我的这篇文章[js高手之路] html5 canvas系列教程 - 开始路径beginPath与关闭路径closePath详解. arc:画 ...

  6. [js高手之路] html5 canvas系列教程 - 图片操作(drawImage,clip,createPattern)

    接着上文[js高手之路] html5 canvas系列教程 - 文本样式(strokeText,fillText,measureText,textAlign,textBaseline)继续,本文介绍的 ...

  7. [js高手之路] html5 canvas系列教程 - 文本样式(strokeText,fillText,measureText,textAlign,textBaseline)

    接着上文线条样式[js高手之路] html5 canvas系列教程 - 线条样式(lineWidth,lineCap,lineJoin,setLineDash)继续. canvas提供两种输出文本的方 ...

  8. [js高手之路] html5 canvas系列教程 - 线条样式(lineWidth,lineCap,lineJoin,setLineDash)

    上文,写完弧度与贝塞尔曲线[js高手之路] html5 canvas系列教程 - arcTo(弧度与二次,三次贝塞尔曲线以及在线工具),本文主要是关于线条的样式设置 lineWidth: 设置线条的宽 ...

  9. [js高手之路] html5 canvas系列教程 - 像素操作(反色,黑白,亮度,复古,蒙版,透明)

    接着上文[js高手之路] html5 canvas系列教程 - 状态详解(save与restore),相信大家都应该玩过美颜功能,而我们今天要讲的就是canvas强大的像素处理能力,通过像素处理,实现 ...

  10. [js高手之路] html5 canvas系列教程 - 线形渐变,径向渐变与阴影设置

    接着上文[js高手之路] html5 canvas系列教程 - 像素操作(反色,黑白,亮度,复古,蒙版,透明)继续. 一.线形渐变 线形渐变指的是一条直线上发生的渐变. 用法: var linear ...

随机推荐

  1. 【Azure API 管理】使用APIM进行XML内容读取时遇见的诡异错误 Expression evaluation failed. Object reference not set to an instance of an object.

    问题描述 使用APIM,在 Inbound 中对请求的Body内容进行解析.客户端请求所传递的Request Body为XML格式,需要从Request Body中解析出多个(Element)节点值, ...

  2. FlinkX

    FlinkX的安装与简单使用 目录 FlinkX的安装与简单使用 FlinkX的安装 FlinkX的简单使用 MySQLToHDFS MySQLToHive MySQLToHBase MySQLToM ...

  3. linux 系统 解决php -v查看到版本于phpinfo()打印的版本不一致问题

    发现问题的原因: 安装zip扩展后,配置成功,但是使用gitlab合并的时候发生错误,经检查,使用phpinfo打印出来的php版本为7.1,而使用linux度服务器 运行 php -v的版本却是5. ...

  4. 关于mysql8.0 caching_sha2_password和sha256_password认证方式

    今天开发上线新系统反馈数据库连接有问题.自己分别在命令行下及navicat进行连接发现,发现root用户密码在命令行下可以正常连接,但是新建立的子用户连接不上.于是就换成管理员密码.立即就连接上了.看 ...

  5. mysql更改my.ini配置文件以后mysql服务无法启动

    最近在调试mysql时,更改了mysql的端口以后发现,mysql怎么改都启动不了,从其它机器重新复制一个my.ini文件就可以启动,这是由于一般用记事本打开配置文件同时更改的ini的格式,我们需要重 ...

  6. webug4.0 打靶笔记-02【完结】

    webug4.0打靶笔记-02 3. 延时注入(时间盲注) 3.1 访问靶场 3.2 寻找注入点 貌似一样的注入点: ?id=1' --+ 3.3 判断输出位置 同前两关一样的位置,时间盲注应该不是这 ...

  7. 编译OneAPI(支持Nvidia显卡)

    开始使用DPC++ 官方安装教程 预备条件 请确保当前开发环境满足如下条件: git cmake版本需要满足3.14及以上. python版本3.6以上的python. nijia版本1.8及以上(使 ...

  8. SoftwareTeacher直播自我感想

    今天老师发布了一个链接直播是关于:同学们聊聊学习软件工程,CS 课程的问题下面是我的个人感悟和笔记 一.编程技术的提升 编程并不是一件很难的事情,就如开车一样,只有多加练习,自己的技术才能提升上去.拿 ...

  9. Python入门随记(4)

    在涉及一些实际问题,会碰到概率论等相关领域的知识,自然少不了矩阵运算,以下是Python中关于矩阵的简单操作: 1.常用库numpy import numpy as np 2.随机生成矩阵 a=np. ...

  10. Linux项目部署 jdk tomcat 安装配置 linux下 failed connect to localhost:8080;Connection refused

         ONBOOT=yes 5.安装wget (1)安装 yum -y install wget (2) 查看版本  wget --version或 wget -V 一.安装jdk 配置 (1)安 ...