主要使用的API有:

  • context.moveTo(x,y) 声明线的起始坐标
  • context.lineTo(x,y) 声明线的下一个坐标
  • context.fillStyle  声明线的填充颜色
  • context.fill()  填充
  • context.strokeStyle 声明线的颜色
  • context.stroke() 绘制直线
  • context.beginPath() 声明线的开始
  • context.closePath() 声明线的结束
        var canvas = document.getElementById('canvas');
canvas.width = 1024;
canvas.height = 768; if (canvas.getContext('2d')) {
var context = canvas.getContext('2d');
console.log(context); // CanvasRenderingContext2D // 使用contex进行绘制 // draw a line
context.moveTo(100, 100); // 声明起点,坐标轴是以canvas的左上角为原点
context.lineTo(700, 700); // 声明终点
context.lineTo(100, 700);
context.lineTo(100, 100); context.fillStyle = 'rgb(2, 100, 30)';
context.fill(); // 填充 context.lineWidth = 5; // 声明线的宽度
context.strokeStyle = "red"; // 声明线的颜色
context.stroke(); // 绘制直线 // draw a another line
context.moveTo(200, 100);
context.lineTo(700, 600);
context.strokeStyle = 'black'; // 线条颜色会覆盖之前声明的颜色
context.stroke();
} else {
alert('当前浏览器不支持Canvas,请更换浏览器后再试');
}

结果:

先设置了线的颜色为红色,再设置线的颜色为黑色,但是最后结果,画出来都是黑色的。这是为什么呢?

因为canvas 绘图是基于状态的,下面设置的颜色状态会覆盖上面的设置状态。

那么如何才能画不同颜色的线呢?

要在每一个单独的path前后,使用 context.beginPath() 和 context.closePath()。

        // draw a line
context.beginPath();
context.moveTo(100, 100); // 声明起点,坐标轴是以canvas的左上角为原点
context.lineTo(700, 700); // 声明终点
context.lineTo(100, 700);
context.lineTo(100, 100);
context.closePath();
context.fillStyle = 'rgb(2, 100, 30)';
context.fill(); // 填充 context.lineWidth = 5; // 声明线的宽度
context.strokeStyle = "red"; // 声明线的颜色
context.stroke(); // 绘制直线 // draw a another line
context.beginPath();
context.moveTo(200, 100);
context.lineTo(700, 600);
context.closePath(); context.strokeStyle = 'black'; // 线条颜色会覆盖之前声明的颜色
context.stroke();

结果:

最新文章

  1. CSharpGL(38)带初始数据创建Vertex Buffer Object的情形汇总
  2. 阶乘之和--nyoj91
  3. Self Organizing Maps (SOM): 一种基于神经网络的聚类算法
  4. Windows下64位Apache服务器的安装
  5. 永不消逝的电波(三):低功耗蓝牙(BLE)入门之如何调戏别人的小米手环
  6. hdoj 5402 Travelling Salesman Problem
  7. 获取地理位置的html5代码
  8. MINA之心跳协议运用
  9. 功能: 用函数 funName 对数组 objArray 中的每个值进行处理一次,
  10. iOS开发系列之触摸事件
  11. js和jquery中有关透明度操作的问题
  12. Jenkins项目部署使用教程-----02视图及项目添加
  13. Oracle和Elasticsearch数据同步
  14. CodeSignal 刷题 —— almostIncreasingSequence
  15. 登录页面加密token和盐的作用
  16. Repeater中服务器按钮
  17. CentOS 6.2图形界面允许root用户登录
  18. 人工打jar包
  19. VUE 内置的标签<keep-alive></keep-alive>作用
  20. spark学习(RDD案例实战)

热门文章

  1. GNU ARM汇编快速入门
  2. Jmeter启动jmeter-server.bat 报java.io.FileNotFoundException:rmi_keystore.jks 解决方法
  3. 使用XML的方式实现账户的CRUD
  4. Css min-height max-height min-width max-height
  5. vue导航菜单动态展示
  6. N皇后问题 --使用位运算解决
  7. 介绍HTML5几种存储方式
  8. .NET面试题系列(二十)XX
  9. Codeforces 960D Full Binary Tree Queries ( 思维 && 模拟 )
  10. BZOJ3438 小M的作物(和拓展)