一、绘制图片

①加载图片

<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>canvas做动画</title>
</head>
<body>
<canvas width="600" height="400"></canvas>
<script>
var myCanvas=document.querySelector('canvas');
var ctx=myCanvas.getContext('2d');
// 创建对象
var image=new Image();
// 绑定加载完成事件
image.onload=function(){
// 这里进行图片相关的绘制
console.log(image);//<img src='1.jpg'>
}
// 设置图片路径
image.src='1.jpg';
</script>
</body>
</html>

②三个参数:drawImage(img,x,y)

<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>canvas做动画</title>
<style>
canvas{
border: 1px solid #000;
}
</style>
</head>
<body>
<canvas width="600" height="400"></canvas>
<script>
var myCanvas=document.querySelector('canvas');
var ctx=myCanvas.getContext('2d');
var image=new Image();
image.onload=function(){
/* *
*ctx.drawImage(image,x,y)
*image是图片对象,canvas对象,video对象
*x和y表示绘制起点,从图片的左上角开始
*/
ctx.drawImage(image,100,100);
}
image.src='1.jpg';
</script>
</body>
</html>

③五个参数:drawImage(img,x,y,w,h)

<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>canvas做动画</title>
<style>
canvas{
border: 1px solid #000;
}
</style>
</head>
<body>
<canvas width="600" height="400"></canvas>
<script>
var myCanvas=document.querySelector('canvas');
var ctx=myCanvas.getContext('2d');
var image=new Image();
image.onload=function(){
/* *
*ctx.drawImage(image,x,y,w,h)
*image是图片对象,canvas对象,video对象
*x和y表示绘制起点,从图片的左上角开始
*w和h表示图片的大小,对图片的缩放
*/
ctx.drawImage(image,100,100,200,200);
}
image.src='1.jpg';
</script>
</body>
</html>

④九个参数:drawImage(img,x,y,w,h,x1,y1,w1,h1)

<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>canvas做动画</title>
<style>
canvas{
border: 1px solid #000;
}
</style>
</head>
<body>
<canvas width="600" height="400"></canvas>
<script>
var myCanvas=document.querySelector('canvas');
var ctx=myCanvas.getContext('2d');
var image=new Image();
image.onload=function(){
/* *
*ctx.drawImage(image,x,y,w,h,x1,y1,w1,h1)
*image是图片对象,canvas对象,video对象
*x和y对图片的进行截取的坐标,从左上角开始
*w和h表示截取图片的大小,对图片的截取
*x1和y1是表示绘制起点,从图片的左上角开始
*w1和h1是表示图片的大小,对图片的缩放
*x,y,w,h是对图片的操作
*x1,y1,w1,h1是对画布上的操作
*/
ctx.drawImage(image,100,100,200,200,100,100,200,200);
}
image.src='1.jpg';
</script>
</body>
</html>

二、帧动画

①首先需要一张精灵图,里面有一组可以连续起来做动画的人或者物

②可以动态的获取图片上主体人或者物的大小尺寸

③通过drawImage( )获取图片上的主体人或者物

④根据索引,在固定的时间间隔内(定时器),更换图片,从而达到动起来的效果,实现帧动画

三、坐标变换

①平移:translate(x,y)参数表示画布的原点的坐标

<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>canvas做动画</title>
<style>
canvas{
border: 1px solid #000;
}
</style>
</head>
<body>
<canvas width="600" height="400"></canvas>
<script>
var myCanvas=document.querySelector('canvas');
var ctx=myCanvas.getContext('2d');
// 第一个矩形
ctx.beginPath();
ctx.fillRect(100,100,200,100);
// 第二个矩形,移动translate(x,y) 是对原点的移动
ctx.beginPath();
ctx.translate(100,100);
ctx.fillStyle='red';
ctx.fillRect(100,100,200,100);
</script>
</body>
</html>

②缩放:scale(x,y)参数表示画布坐标的缩放

<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>canvas做动画</title>
<style>
canvas{
border: 1px solid #000;
}
</style>
</head>
<body>
<canvas width="600" height="400"></canvas>
<script>
var myCanvas=document.querySelector('canvas');
var ctx=myCanvas.getContext('2d');
// 第一个矩形
ctx.beginPath();
ctx.fillRect(100,100,200,100);
// 第二个矩形,移动scale(x,y) 是对画布坐标的缩放
ctx.beginPath();
ctx.scale(0.5,0.5);
ctx.fillStyle='red';
ctx.fillRect(100,100,200,100);
</script>
</body>
</html>

③旋转:rotate(angle)参数表示旋转的角度

<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>canvas做动画</title>
<style>
canvas{
border: 1px solid #000;
}
</style>
</head>
<body>
<canvas width="600" height="400"></canvas>
<script>
var myCanvas=document.querySelector('canvas');
var ctx=myCanvas.getContext('2d');
ctx.translate(200,200);
setInterval(function(){
// rotate(angle)默认是以画布原点的位置为圆心进行旋转
// 通过translate(x,y)可以对画布原点进行移动
angle=Math.PI/90;
ctx.rotate(angle);
ctx.strokeRect(0,0,100,100);
},100);
</script>
</body>
</html>

canvas做动画的更多相关文章

  1. 用Canvas做动画

    之前看过不少HTML5动画的书,讲解的是如何去做,对于其中的数学原理讲解的不详细,常有困惑.最近看的<HTML5+JavaScript 动画基础>这个是译本,Keith Peters曾写过 ...

  2. canvas小球动画原理

    随着html5发展,canvas标签作为h5革命性的发展标志也越来越流行.canvas标签的强大之处,不仅在于它可以作为一个独立的画布,也可以利用canvas做一些动画而不用导入flash文件.同时, ...

  3. 使用requestAnimationFrame做动画效果二

    3月是个好日子,渐渐地开始忙起来了,我做事还是不够细心,加上感冒,没精神,今天差点又出事了,做过的事情还是要检查一遍才行,哎呀. 使用requestAnimationFrame做动画,我做了很久,终于 ...

  4. 让CALayer的shadowPath跟随bounds一起做动画改变-b

    在iOS开发中,我们经常需要给视图添加阴影效果,最简单的方法就是通过设置CALayer的shadowColor.shadowOpacity.shadowOffset和shadowRadius这几个属性 ...

  5. Android使用XML做动画UI

    在Android应用程序,使用动画效果,能带给用户更好的感觉.做动画可以通过XML或Android代码.本教程中,介绍使用XML来做动画.在这里,介绍基本的动画,如淡入,淡出,旋转等. 效果: htt ...

  6. 使用Canvas实现动画效果 | DKlogs -- 设计 | 生活

    使用Canvas实现动画效果 | DKlogs -- 设计 | 生活 使用Canvas实现动画效果

  7. [UWP]用Shape做动画

    相对于WPF/Silverlight,UWP的动画系统可以说有大幅提高,不过本文无意深入讨论这些动画API,本文将介绍使用Shape做一些进度.等待方面的动画,除此之外也会介绍一些相关技巧. 1. 使 ...

  8. [UWP]用Shape做动画(2):使用与扩展PointAnimation

    上一篇几乎都在说DoubleAnimation的应用,这篇说说PointAnimation. 1. 使用PointAnimation 使用PointAnimation可以让Shape变形,但实际上没看 ...

  9. transition和animation做动画(css动画二)

    前言:这是笔者学习之后自己的理解与整理.如果有错误或者疑问的地方,请大家指正,我会持续更新! translate:平移:是transform的一个属性: transform:变形:是一个静态属性,可以 ...

随机推荐

  1. GitLab+Jenkins持续集成

    一.概述 GitLab是一个代码仓库,用来管理代码.Jenkins是一个自动化服务器,可以运行各种自动化构建.测试或部署任务.所以这两者结合起来,就可以实现开发者提交代码到GitLab,Jenkins ...

  2. python_并发与通信

    独立的进程内存空间与共享的服务器进程空间 知识点一: 进程间通信的限制 进程是独立的,互不干扰的独立内存空间我们想不能修改变量但是,深层次问题是,这个进程与那个进程完全失去了联系 import mul ...

  3. Spark数据倾斜解决方案及shuffle原理

    数据倾斜调优与shuffle调优 数据倾斜发生时的现象 1)个别task的执行速度明显慢于绝大多数task(常见情况) 2)spark作业突然报OOM异常(少见情况) 数据倾斜发生的原理 在进行shu ...

  4. 计数数据存入Mysql

    引用dll MySql.Data.dll 建一个数据连接静态类 public static class mysql{public static string constr = "databa ...

  5. Mars Android 接入指南

    Mars Android 接入指南 https://github.com/Tencent/mars/wiki/Mars-Android-%E6%8E%A5%E5%85%A5%E6%8C%87%E5%8 ...

  6. 【面试突击】-SpringBoot面试题(一)

    Spring Boot 是微服务中最好的 Java 框架. 我们建议你能够成为一名 Spring Boot 的专家. 问题一 Spring Boot.Spring MVC 和 Spring 有什么区别 ...

  7. css,对包含有子元素的元素进行flex后,会影响原有的布局。如何后续处理

    对包含有子元素的元素进行flex后,会影响原有的布局. 例如设置两个div,第一个div包含一个img(图片),第二个div包含多个p元素(对前面的img的说明).如下图 1:当对着两个两个div进行 ...

  8. Appscan漏洞之已解密的登录请求

    本次针对 Appscan漏洞 已解密的登录请求 进行总结,如下: 1.1.攻击原理 未加密的敏感信息(如登录凭证,用户名.密码.电子邮件地址.社会安全号等)发送到服务器时,任何以明文传给服务器的信息都 ...

  9. MySQL备份,使用xtrabackup备份全实例数据时,会造成锁等待吗?那么如果使用mysqldump进行备份呢?

    一.xtrabackup和mysqldump会造成锁等待吗? xtrabackup会,它在备份时会产生短暂的全局读锁FTWL(flush table with read lock),用于拷贝frm/M ...

  10. Linux--重要文件

    目录 /etc/resolv.conf /etc/host /etc/sysconfig/network /etc/fstab /etc/rc.local /etc/profile /etc/bash ...