canvas 必须认识到的大坑
<!-- 重点:
在js/canvas标签中定义的宽和高是画布实际的宽和高。
在样式表中定义的宽和高是画布缩放后的宽和高。
即:把js/canvas实际大小缩放到css中的宽高即可。浏览器中显示的效果是css中设置的宽高。 一,没有设置canvas宽高,默认是300px*150px。设置canvas在浏览器中的实际宽高,必须在canvas标签或者使用js进行设置。而使用css进行设置的宽高是进行缩放后大小,与实际位置不同。 1,<canvas id="mycanvas" class="mycanvas" width="200px" height="200px">您的浏览器不支持canvas标签</canvas>
2, var mycanvas = document.querySelector("#mycanvas");
var ctx = mycanvas.getContext('2d');//2d画布环境
mycanvas.width=400; //这里没有单位
mycanvas.height=300; //这里没有单位
-->
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>canvas的坑</title>
<style>
.mycanvas{background: #ccc;width: 500px;height: 500px;}
.mycanvas1{
background: yellow;
/*这里的设置的宽高等价于把canvas默认宽高300*150 进行缩放至 100*100。
所以在js中 从(0,0)到(100,100)之间画一条直线,这两个点也按照300*150进行缩放,再画直线*/
width: 200px;
height: 200px;
}
</style>
</head>
<body>
<canvas id="mycanvas" class="mycanvas">您的浏览器不支持canvas标签</canvas>
<script type="text/javascript">
var mycanvas = document.querySelector("#mycanvas");
var ctx = mycanvas.getContext('2d');//2d画布环境
mycanvas.width=100;//在页面中实际大小
mycanvas.height=100;//在页面中实际大小
ctx.moveTo(0,0);
ctx.lineTo(100,100);
ctx.stroke();
</script> <canvas id="mycanvas1" class="mycanvas1">您的浏览器不支持canvas标签</canvas>
<script type="text/javascript">
var mycanvas1 = document.querySelector("#mycanvas1");
var ctx1 = mycanvas1.getContext('2d');//2d画布环境
ctx1.moveTo(0,0);
ctx1.lineTo(100,100);
ctx1.stroke();
</script>
</body>
</html> =========== ctx.beginPath(); 清除之前在内存中预先画的路径,重新开始预先画路径,直到ctx.stroke()才会真正在页面中画出路径 重点:ctx.beginPath();实例一:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>canvas</title>
<style>
.mycanvas{background: #ccc;}
</style>
</head>
<body>
<canvas id="mycanvas" class="mycanvas" width="300px" height="300px">您的浏览器不支持canvas</canvas>
<script>
var canvas = document.querySelector("#mycanvas");
var ctx = canvas.getContext("2d");//2d环境
//moveTo(0,0) 到 ctx.lineTo(100,200) 只是在内存中预先画的路径,并没有画出来。
ctx.moveTo(0,0);
ctx.lineTo(100,100);
ctx.lineTo(100,200);
ctx.strokeStyle = "red";
ctx.stroke();//已经画一次 //ctx.beginPath(); 作用:清除之前在内存中预先画的路径,重新开始预先画路径。
//如果注释该代码,那么上面的路径在内存中会被再画一次。再继续画下面的路径。
//到了最后的ctx.stroke()时,就会把内存中预先画好的路径全部画出来。
ctx.beginPath();
ctx.moveTo(100,0);
ctx.lineTo(200,100);
ctx.lineTo(200,200);
ctx.strokeStyle = "green";
ctx.stroke();//画出内存中预先画好的路径。
</script>
</body>
</html> 重点:
ctx.beginPath() 和 ctx.closePath() 不一定要成对出现,因为意义完全不同。 canvas 模板:
var canvas = document.querySelector("#mycanvas");
var ctx = canvas.getContext("2d");//设置绘画2d环境
ctx.beginPath(); 清除之前在内存中预先画的路径,重新开始预先画路径,直到ctx.stroke()才会真正在页面中画出路径
.........(具体画什么图形)
ctx.closePath();//自动闭合起点和终点,不一定要有,需要闭合路线才写。
ctx.strokeStyle="#d36";//设置路线颜色
ctx.stroke();//把内存中的路径全部画在网页中 //画线
ctx.beginPath(); 清除之前在内存中预先画的路径,重新开始预先画路径,直到ctx.stroke()才会真正在页面中画出路径
ctx.moveTo(50,500);
ctx.lineTo(100,300);
ctx.lineTo(300,600);
ctx.closePath();//自动闭合起点和终点
ctx.strokeStyle="#d36";//设置路线颜色
ctx.stroke();//把内存中的路径全部画在网页中 // 画圆 ctx.arc(x,y,r,开始弧度,终止弧度,true逆时针画/flase顺时针画);
// ctx.arc(圆点x轴坐标,圆点y轴坐标,圆的半径,开始弧度,终止弧度,true逆时针画/flase顺时针画); // 画矩形 rectangle 英 [ˈrektæŋɡl] 矩形
// ctx.strokeRect(x,y,width,height);该方法是已经封装好了的,不用ctx.beginPath(),ctx.closePath(),ctc.stroke();
// ctx.strokeRect(矩形起始点x轴坐标,矩形起始点y轴坐标,矩形宽,矩形高);
ctx.strokeStyle="purple";
ctx.strokeRect(200,200,300,100); <!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>canvas</title>
<style>
.mycanvas{background: #ccc;}
</style>
</head>
<body>
<canvas id="mycanvas" class="mycanvas" width="600px" height="600px">您的浏览器不支持canvas</canvas>
<script>
var canvas = document.querySelector("#mycanvas");
var ctx = canvas.getContext("2d");//2d环境
//moveTo(0,0) 到 ctx.lineTo(100,200) 只是在内存中预先画的路径,并没有画出来。
ctx.moveTo(50,250);
ctx.lineTo(250,250);
ctx.strokeStyle = "green";
ctx.stroke();
ctx.beginPath();//如果从新开始话,必须清除之前内存中预画的路径
ctx.moveTo(250,250);
ctx.lineTo(150,50);
ctx.strokeStyle = "yellow";
ctx.stroke();
ctx.beginPath();//如果从新开始话,必须清除之前内存中预画的路径
ctx.moveTo(150,50);
ctx.lineTo(50,250);
ctx.strokeStyle = "red";
ctx.stroke(); //画线
ctx.beginPath();//清除内存中预画好的路径,从新开始预画路径。
ctx.moveTo(50,500);
ctx.lineTo(100,300);
ctx.lineTo(300,600);
ctx.closePath();//自动闭合起点和终点
ctx.strokeStyle="#d36";
ctx.stroke(); // 画圆 ctx.arc(x,y,r,开始弧度,终止弧度,true逆时针画/flase顺时针画);
// ctx.arc(圆点x轴坐标,圆点y轴坐标,圆的半径,开始弧度,终止弧度,true逆时针画/flase顺时针画);
ctx.beginPath();
ctx.arc(200,400,50,0,2*Math.PI,true);
ctx.closePath();
ctx.strokeStyle="#00d";
ctx.stroke(); // 画矩形 rectangle 英 [ˈrektæŋɡl] 矩形
// ctx.strokeRect(x,y,width,height);
// ctx.strokeRect(矩形起始点x轴坐标,矩形起始点y轴坐标,矩形宽,矩形高);
ctx.strokeStyle="purple";
ctx.strokeRect(200,200,300,100);
</script>
</body>
</html> =========== 重点:描边 与 填充
二者可以一起使用,除了已经封装好的矩形ctx.strokeRect(x,y,w,h);
// 先描边再填充,填充会覆盖描边的颜色
// 如果是先填充再描边,描边会覆盖填充。
// 即后者会覆盖前者的。 给路径或图形填充颜色话,如果不设置颜色的话,默认颜色是黑色,如果要设置颜色的话,要写设置颜色,然后再调用fill方法。这里的#00f就是蓝色 //描边样式
ctx.strokeStyle="#f0f";//必须写在stroke()方法之前,之后的无效
ctx.lineWidth = 5;
ctx.stroke(); //填充样式
ctx.fillStyle="#0f0";//必须写在fill()方法之前,之后的无效
ctx.fill(); <!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>描边与填充</title>
<style>
.mycanvas{background: #ccc;}
</style>
</head>
<body>
<canvas id="mycanvas" class="mycanvas" width="300px" height="300px">您的浏览器不支持canvas,请升级!</canvas>
<script>
var canvas = document.querySelector("#mycanvas");
var ctx = canvas.getContext("2d");//设置2d环境
ctx.moveTo(20,20);
ctx.lineTo(50,100);
ctx.lineTo(20,100);
ctx.closePath();
// 先描边再填充,所以填充会覆盖描边的颜色
// 如果是先填充再描边,描边会覆盖填充。后面覆盖前面的部分。
ctx.strokeStyle="#f0f";
ctx.lineWidth = 5;
ctx.stroke();
ctx.fillStyle="#0f0";
ctx.fill(); //画圆
// 先描边再填充,填充的红色会覆盖描边的紫色
// 相反,描边的紫色会覆盖填充的红色
ctx.beginPath();
ctx.arc(100,200,50,0,2*Math.PI,true);
ctx.strokeStyle="purple";
ctx.lineWidth=10;
ctx.stroke();
ctx.fillStyle="rgba(255,0,0,.2)";
ctx.fill(); //矩形
ctx.beginPath();
ctx.strokeStyle="rgba(0,255,255,.5)";
ctx.lineWidth=20;
ctx.strokeRect(150,80,100,50);
//因为ctx.strokeRect(x,y,w,h);是已经封装好的,所以使用fill()方法是无效的,即矩形不能填充,只能使用其他方式进行填充。
// ctx.fillStyle="green";
// ctx.fill();
</script>
</body>
</html> =========

Canvas 总结,到第4章 canvas图形变换的更多相关文章

  1. 《WPF程序设计指南》读书笔记——第7章 Canvas

    1.Canvas面板 using System; using System.Windows; using System.Windows.Controls; using System.Windows.M ...

  2. CreateJS第0章- Canvas基础

    最近网页游戏比较火,以前做过一些小游戏,但是过段时间就都忘了,今天在这里记录一下学习过程,以备后用.做网页游戏有很多种框架,我是flash程序用Adobe出品的CreateJS最容易.基本上继承了fl ...

  3. canvas星空和图形变换

    图形变换. 一.画一片星空 先画一片canvas.width宽canvas.height高的黑色星空,再画200个随机位置,随机大小,随机旋转角度的星星. window.onload=function ...

  4. HTML5 Canvas ( 图形变换, 升级版的星空 ) translate, rotate, scale

    <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title> ...

  5. 《Programming WPF》翻译 第7章 1.图形基础

    原文:<Programming WPF>翻译 第7章 1.图形基础 WPF使得在你的应用程序中使用图形很容易,以及更容易开发你的显卡的能力.这有很多图形构架的方面来达到这个目标.其中最重要 ...

  6. 《Programming WPF》翻译 第7章 2.图形

    原文:<Programming WPF>翻译 第7章 2.图形 图形时绘图的基础,代表用户界面树的元素.WPF支持多种不同的形状,并为它们每一个都提供了元素类型. 7.2.1基本图形类 在 ...

  7. 【Android】第21章 2D图形和动画

    分类:C#.Android.VS2015: 创建日期:2016-03-19 一.简介 Android系统定义了一系列独立的图形处理类,其中,2D图形处理类分别位于以下命名空间: Android.Gra ...

  8. HTML5 Canvas、内联 SVG、Canvas vs. SVG

    canvas 元素用于在网页上绘制图形. 什么是 Canvas? HTML5 的 canvas 元素使用 JavaScript 在网页上绘制图像. 画布是一个矩形区域,您可以控制其每一像素. canv ...

  9. Canvas学习系列一:初识canvas

    最近你开始在学习canvas,打算把学习canvas的整个学习过程当中的一些笔记与总结记录下来,如有什么不足之处还请大神们多多指出. 1. 认识canvas Canvas元素的出现,可以说开启的Web ...

随机推荐

  1. 使用ImagesPipeline时候报错为:ModuleNotFoundError: No module named 'scrapy.contrib'

    刚开始我是这样写的: 报错为: 哈哈,经过查阅资料,其实他是存在的,接下来修改如下: 经过运行结果如下: 问题解决,哈哈哈,搞定!!!!!!!!!!!!

  2. 状态机的Verilog写法

    “硬件设计很讲究并行设计思想,虽然用Verilog描述的电路大都是并行实现的,但是对于实际的工程应用,往往需要让硬件来实现一些具有一定顺序的工作,这就要用到状态机思想.什么是状态机呢?简单的说,就是通 ...

  3. BZOJ4141 THUSC2013 魔塔 贪心

    没得传送门 考虑当\(Atk\)增大时,\(Def\)一定越来越没用,因为回合数在变少.所以考虑从小到大枚举\(Atk\)然后双指针计算. 设\(f_i(x)\)表示在\(Atk = i\)时,\(D ...

  4. Spark 系列(十三)—— Spark Streaming 与流处理

    一.流处理 1.1 静态数据处理 在流处理之前,数据通常存储在数据库,文件系统或其他形式的存储系统中.应用程序根据需要查询数据或计算数据.这就是传统的静态数据处理架构.Hadoop 采用 HDFS 进 ...

  5. This project references NuGet package(s) that are missing on this computer. Enable NuGet Package Restore to download them. For more information, see http://go.microsoft.com/fwlink/?LinkID=317567.

    记事本打开csproj文件 搜索nuget 删除Target节点 类似如下: <Target Name="EnsureBclBuildImported" BeforeTarg ...

  6. 【cookie的使用】&【Session】

    明确一点:        cookie由服务器创建Cookie cookie=new Cookie("haha","xixi") 通过HtttpServletR ...

  7. vue + elementui 使用多选按钮实现单选功能

    CommonRadio.vue <template> <div> <el-checkbox-group v-model="checkList" @ch ...

  8. 从汇编语言写到c语言

    好了,言归正传,裸机程序没有操作系统的支持,想要用c语言,就只能先使用汇编语言手动配置c语言需要的环境,听起来很高大上,其实需要做的很简单:指定堆栈指针的值就好. 那么完成这个简单的事情之前,先要明白 ...

  9. es5中变量提升的问题

    <script> //变量提升的问题 var tem=new Date(); //函数f 输出tem var命令会发生“变量提升”现象 //局部变量优先高于全局变量 var tem=&qu ...

  10. Python——字符串增加颜色

    给显示字符添加颜色: salary=int(input('\033[31;1m请输入你的工资:\033[0m')) ('\033[;1m请输入你的工资:\033[0m') 3x是给字符串改变颜色 31 ...