以下案例都是先在body里新建了一个宽高都为600px的canvas画布,再将案例里的代码放在script里执行:
<canvas width="600px" height="600px">canvas>
案例一:绘制一个矩形
- // 填充矩形
- window.onload=function(){
- // 1.获取画布
- var canvas = document.querySelector('canvas');
- // 2.获取画笔 上下文对象
- var content = canvas.getContext('2d');
- // 3.给图形设置填充样式
- content.fillStyle='pink'; // 实心填充
- // 4.绘制图形 绘制矩形
- // fillReact 参数: x轴起始位置, y轴起始位置, 宽, 高
- content.fillRect(0,0,200,200)
- }
-
-
- // 轮廓矩形
- window.onload=function(){
- // 1.获取画布
- var canvas = document.querySelector('canvas');
- // 2.获取画笔 上下文对象
- var content = canvas.getContext('2d');
- // 绘制轮廓矩形
- // 3.给图形设置填充样式
- content.strokeStyle='lightblue';
- // 给轮廓图形设置线宽
- content.lineWidth=10;
- //绘制轮廓矩形 参数: x轴起始位置, y轴起始位置, 宽, 高
- content.strokeRect(100,100,200,200);
- }
案例二:绘制一个圆形
注意:Math.PI 就代表180°,如果我们需要360°,则直接用Math.PI*2,如果我们需要60°,则直接用Math.PI/3
- window.onload=function(){
- // 1.获取画布
- var canvas=document.querySelector('canvas');
- // 2.获取上下文对象
- var content=canvas.getContext('2d');
- // 3.需要给一个开始路径
- content.beginPath();
- // 4.绘制圆 arc参数:x y开始的位置 r半径 开始弧度 Math.PI(180度) 结束弧度 布尔值(默认false顺时针,true为逆时针)
- content.arc(100, 100,100,0,Math.PI*2, true)
- // 5.绘制圆的样式
- content.fillStyle='yellow'
- // 6.绘制圆形
- content.fill();
- // 7.需要给结束路径
- content.closePath();
- }
如果需要绘制轮廓圆,也只需要像轮廓矩形那样将 fill 改成 srtoke,其他步骤都一样:
- // 绘制轮廓圆
- content.strokeStyle='black';
- // 绘制轮廓圆
- content.stroke();
案例三:圆的移动
在这里我们需要先知道如何清除画布区域:
- // 清除画布部分区域
- content.clearRect(100,100,50,50)
- // 清除画布全部区域
- content.clearRect(0,0,400,400)
接下来进行圆的移动:
- window.onload=function(){
- // 1.获取画布
- var canvas=document.querySelector('canvas');
- // 2.获取上下文对象
- var content=canvas.getContext('2d');
- var obj = {
- x:100,
- y:100,
- r:100,
- color:'green'
- };
- // 声明绘制圆的方法
- function draw(obj){
- content.beginPath();
- content.arc(obj.x,obj.y,obj.r,0,Math.PI*2);
- // 绘制填充⚪样式
- // content.fillStyle=obj.color;
- // 绘制圆
- content.fill();
- content.closePath();
- }
- // 声明移动圆的方法
- function move(obj){
- // 表示每次都向x轴与y轴移动5px
- obj.x+=5;
- obj.y+=5;
- draw(obj);
- }
- // 设置一个定时器,后面的参数500为0.5秒移动一次
- setInterval(function(){
- // 清除原先的圆
- content.clearRect(0,0,600,600);
- move(obj);
- },500);
- draw(obj);
- }
案例四:线性渐变
- window.onload=function(){
- // 1.获取画布
- var canvas=document.querySelector('canvas');
- // 2.获取上下文对象
- var content=canvas.getContext('2d');
- // 3.绘制一个线性渐变图形
- // 3.1创建一个线性渐变对象
- // createLinearGradient(四个参数) 参数:渐变x、y轴开始位置 渐变结束x、y轴位置
- var L = content.createLinearGradient(0,0,400,400)
- // 3.2给渐变图形填充颜色
- L.addColorStop(0,'lightpink');
- L.addColorStop(0.2,'lightyellow');
- L.addColorStop(0.3,'lightgreen');
- L.addColorStop(0.5,'lightpink');
- L.addColorStop(0.8,'lightskyblue');
- L.addColorStop(1.0,'lightblue');
- // 4.将渐变对象给到图形填充样式
- content.fillStyle=L;
- // 5.绘制填充图形
- content.fillRect(0,0,400,400);
- }
实现效果如下:

案例四:径向渐变(同心圆渐变)
- window.onload=function(){
- // 1.获取画布
- var canvas=document.querySelector('canvas');
- // 2.获取上下文对象
- var content=canvas.getContext('2d');
- // 3.绘制一个径向渐变图形
- // 3.1创建一个径向渐变对象
- // createRadialGradient(),参数:小圆 x y r 大圆 x y r
- var g = content.createRadialGradient(200,200,100,200,200,200)
- // 3.2给径向渐变图形填充颜色
- g.addColorStop(0,'lightpink');
- g.addColorStop(0.2,'pink');
- g.addColorStop(0.4,'lightyellow');
- g.addColorStop(0.6,'lightgreen');
- g.addColorStop(0.8,'lightpink');
- g.addColorStop(1.0,'lightblue');
- // 4.将渐变对象给到图形填充样式
- content.fillStyle=g;
- // 5.绘制填充图形
- content.fillRect(0,0,400,400);
- }
实现效果如下:

案例五:绘制线段
- window.onload=function(){
- var canvas=document.querySelector('canvas')
- var content = canvas.getContext('2d')
- content.lineWidth=8;
- // 线段开始路径
- content.beginPath();
- // 绘制线段 从哪里开始 从哪里结束
- content.moveTo(0,0);
- content.lineTo(100,100);
- content.lineTo(300,10);
- content.lineTo(300,100);
- // 设置颜色
- content.strokeStyle='cyan';
- // 绘制线段
- content.stroke();
- content.closePath();
- }
实现效果如下:

案例六:绘制图像 / 视频 / 文本
- window.onload=function(){
- var canvas=document.querySelector('canvas')
- var content = canvas.getContext('2d')
- // 创建一个img标签 构造函数方式new Image()
- var img = new Image();
- console.log(img);
- img.src="./音视频/音视频/3.jpg";
- // 绘制图片 参数:要绘制的图片/视频,开始的x,y轴位置,宽高
- img.onload=function(){
- content.drawImage(img, 0,0,300,200)
- }
- }

绘制视频:
- // 绘制视频
- var video=document.querySelector('video');
- function draw(){
- content.drawImage(video,0,0,300,300)
- // 请求动画帧
- requestAnimationFrame(draw);
- //告诉浏览器你希望执行一个动画,并且要求浏览器在下次重绘之前调用指定得回调函数更新动画
- }
- draw();
绘制文本:
- // 绘制文本
- content.font='18px bold';
- // 参数:文本,x y起始位置
- content.fillText('Hello',100,100)
- content.strokeText('Hello',100,100)