canvas初体验


1. 用JavaScript画出一个画布

   
   
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>canvas</title>
</head>
<body>
<!-- 创建一个宽500300的画布 -->
<canvas id="demo" width=500 height="300"></canvas>
 
<script>
// 获取某个canvas标签
var canvas = document.getElementById("demo");
// 设置背景颜色
canvas.style.backgroundColor = 'pink';
// 设置边框
canvas.style.border = "1px solid #000";
 
</script>
</body>
</html>

效果图:



2. 需要注意的地方

  1. canvas不具备绘图功能,图形的绘制必须用JavaScript来完成;
  2. canvas画布的大小不能用CSS来设置,因为这样只会进行同比缩放,并不会把画布变大;
  3. 可以通过style属性给canvas设置背景色,边框等;
  4. 如果不设置canvaswidthheight则默认为300*150(不能通过canvasstyle属性设置);


3. 用JavaScript设置画布的宽,高,边框

   
   
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>canvas</title>
</head>
<body>
<canvas id="demo"></canvas>
 
<script>
// 获取canvas
var demo = document.getElementById("demo");
// 设置宽度
demo.width = 300 ;
// 设置高度
demo.height = 200 ;
// 设置边框
demo.style.border = "1px solid blue" ;
 
</script>
</body>
</html>

效果图:


4. canvas的坐标




5. 画一条直线


   
   
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>canvas</title>
</head>
<body>
<canvas id="demo"></canvas>
 
<script>
// 获取canvas
var demo = document.getElementById("demo");
// 设置宽度
demo.width = 300 ;
// 设置高度
demo.height = 200 ;
// 设置边框
demo.style.border = "1px solid blue" ;
 
// 得到控制权,绘制2D图形
var ctx = demo.getContext("2d");
// 找到起始点,第一个数是X轴,第二个数是Y轴。往右和下都是正方向;
ctx.moveTo(100,100);
// 线的结束点
ctx.lineTo(200,100);
// 将线描边
ctx.stroke();
 
</script>
</body>
</html>
效果图:


6. 画一个线段 ctx.moveTo()和ctx.lineTo()

   
   
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>canvas</title>
</head>
<body>
<canvas id="demo"></canvas>
 
<script>
// 获取canvas
var demo = document.getElementById("demo");
// 设置宽度
demo.width = 300 ;
// 设置高度
demo.height = 300 ;
// 设置边框
demo.style.border = "1px solid blue" ;
var a = document.m
 
// 得到控制权,绘制2D图形
var ctx = demo.getContext("2d");
 
// 找到起始点,第一个数是X轴,第二个数是Y轴。往右和下都是正方向;
ctx.moveTo(100,100);
// 线的结束点
ctx.lineTo(200,100);
ctx.lineTo(100,200);
// 将线描边
ctx.stroke();
 
</script>
</body>
</html>
效果图:


7. 将所画的线段闭合 ctx.closePath()

   
   
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>canvas</title>
</head>
<body>
<canvas id="demo"></canvas>
 
<script>
// 获取canvas
var demo = document.getElementById("demo");
// 设置宽度
demo.width = 300 ;
// 设置高度
demo.height = 300 ;
// 设置边框
demo.style.border = "1px solid blue" ;
var a = document.m
 
// 得到控制权,绘制2D图形
var ctx = demo.getContext("2d");
 
// 找到起始点,第一个数是X轴,第二个数是Y轴。往右和下都是正方向;
ctx.moveTo(100,100);
// 线的结束点
ctx.lineTo(200,100);
ctx.lineTo(100,200);
// 自动将线段闭合
ctx.closePath();
// 将线描边
ctx.stroke();
 
</script>
</body>
</html>

效果图:




8. 设置描边的颜色 ctx.strokeStyle = "blue";

   
   
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>canvas</title>
</head>
<body>
<canvas id="demo"></canvas>
 
<script>
// 获取canvas
var demo = document.getElementById("demo");
// 设置宽度
demo.width = 300 ;
// 设置高度
demo.height = 300 ;
// 设置边框
demo.style.border = "1px solid blue" ;
var a = document.m
 
// 得到控制权,绘制2D图形
var ctx = demo.getContext("2d");
 
// 找到起始点,第一个数是X轴,第二个数是Y轴。往右和下都是正方向;
ctx.moveTo(100,100);
// 线的结束点
ctx.lineTo(200,100);
ctx.lineTo(100,200);
// 自动将线段闭合
ctx.closePath();
// 设置描边的颜色
ctx.strokeStyle = "blue";
// 将线描边
ctx.stroke();
 
</script>
</body>
</html>
效果图:


9. 给绘制的区域设置填充色

   
   
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>canvas</title>
</head>
<body>
<canvas id="demo"></canvas>
 
<script>
// 获取canvas
var demo = document.getElementById("demo");
// 设置宽度
demo.width = 300 ;
// 设置高度
demo.height = 300 ;
// 设置边框
demo.style.border = "1px solid blue" ;
var a = document.m
 
// 得到控制权,绘制2D图形
var ctx = demo.getContext("2d");
 
// 找到起始点,第一个数是X轴,第二个数是Y轴。往右和下都是正方向;
ctx.moveTo(100,100);
// 线的结束点
ctx.lineTo(200,100);
ctx.lineTo(100,200);
// 自动将线段闭合
ctx.closePath();
// 设置描边的颜色
ctx.strokeStyle = "blue";
// 设置填充色
ctx.fillStyle = "yellow";
// 将线描边
ctx.stroke();
// 给绘制的区域一个填充颜色
ctx.fill();
 
</script>
</body>
</html>
效果图:



10. 设置描边的宽度

   
   
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>canvas</title>
</head>
<body>
<canvas id="demo"></canvas>
 
<script>
// 获取canvas
var demo = document.getElementById("demo");
// 设置宽度
demo.width = 300 ;
// 设置高度
demo.height = 300 ;
// 设置边框
demo.style.border = "1px solid blue" ;
var a = document.m
 
// 得到控制权,绘制2D图形
var ctx = demo.getContext("2d");
 
// 找到起始点,第一个数是X轴,第二个数是Y轴。往右和下都是正方向;
ctx.moveTo(100,100);
// 线的结束点
ctx.lineTo(200,100);
ctx.lineTo(100,200);
// 自动将线段闭合
ctx.closePath();
// 设置描边的颜色
ctx.strokeStyle = "blue";
// 设置描边的宽度
ctx.lineWidth = 5 ;
// 设置填充色
ctx.fillStyle = "yellow";
// 将线描边
ctx.stroke();
// 给绘制的区域一个填充颜色
ctx.fill();
 
</script>
</body>
</html>

效果图:



11. 画多条直线


   
   
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>canvas</title>
</head>
<body>
<canvas id="demo"></canvas>
 
<script>
var demo = document.getElementById("demo");
demo.width = 300 ;
demo.height = 300 ;
demo.style.border = "2px solid blue";
 
// 取得控制权,绘制2D图形
var ctx = demo.getContext("2d");
 
ctx.moveTo(100,100);
ctx.lineTo(100,200);
 
ctx.moveTo(200,100);
ctx.lineTo(200,200);
 
//描边
ctx.stroke();
 
</script>
</body>
</html>
效果图:





12. 画多条直线,每条直线颜色不一样


   
   
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>canvas</title>
</head>
<body>
<canvas id="demo"></canvas>
 
<script>
var demo = document.getElementById("demo");
demo.width = 500 ;
demo.height = 300 ;
demo.style.border = "2px solid blue";
 
// 取得控制权,绘制2D图形
var ctx = demo.getContext("2d");
 
ctx.moveTo(100,100);
ctx.lineTo(100,200);
ctx.strokeStyle = "red";
ctx.stroke();
 
ctx.beginPath(); //从新绘图,与前面无关,不然会将上面图形再画一次
ctx.moveTo(200,100);
ctx.lineTo(200,200);
ctx.strokeStyle = "pink";
ctx.stroke();
 
ctx.beginPath();
ctx.moveTo(300,100);
ctx.lineTo(300,200);
ctx.strokeStyle = "blue";
ctx.stroke();
 
 
</script>
</body>
</html>
效果图:


13. 画一个网格


效果图:



14. 画一个矩形 ctx.rect(x,y,width,height);

   
   
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>canvas</title>
</head>
<body>
<canvas id="demo"></canvas>
 
<script>
var demo = document.getElementById("demo");
demo.width = 500 ;
demo.height = 500 ;
demo.style.border = "2px solid blue";
// 取得控制权,绘制2D图形
var ctx = demo.getContext("2d");
 
// 画矩形
ctx.rect(100,200,300,200);
// 描边
ctx.stroke();
 
</script>
</body>
</html>
效果图:


15. 画一个矩形自带描边 ctx.strokeRect(x,y,width,height);

   
   
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>canvas</title>
</head>
<body>
<canvas id="demo"></canvas>
 
<script>
var demo = document.getElementById("demo");
demo.width = 500 ;
demo.height = 500 ;
demo.style.border = "2px solid blue";
// 取得控制权,绘制2D图形
var ctx = demo.getContext("2d");
//自带描边,画出矩形的同时就会描边  
ctx.strokeRect(50,100,200,200);
 
</script>
</body>
</html>
效果图:



16. 绘制圆弧

16.1 弧度和角度的基本知识


16.2 绘制圆弧

ctx.arc(x, y, radius, startAngle, endAngle, anticlockwise)
x:圆心的x轴
y:圆心的y轴
radius:圆弧的半径
startAngle:起始角度(弧度)
endAngle:终止角度(弧度)
anticlockwise:绘制方向(true:逆时针绘制,false:顺时针绘制)

   
   
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>circle</title>
</head>
<body>
<canvas id="demo"></canvas>
 
<script>
var demo = document.getElementById("demo");
demo.width = 600 ;
demo.height = 600 ;
demo.style.border = "1px solid blue" ;
var ctx = demo.getContext("2d");
 
// 圆心的坐标x:300; y:300; 圆弧半径:100; 起始弧度:0; 终止弧度:pi/3(60°); 顺时针绘制
ctx.arc(300, 300, 100, 0, (60*Math.PI)/180,false);
//描边
ctx.stroke();
 
</script>
</body>
</html>
效果图:


17. 将图片放到画布里面


<!doctype html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>canvas-img</title>
</head>
<body>
<img id="img" src="img/coder.jpg" alt="">
<canvas id="demo"></canvas>

<script>
    var img = document.getElementById("img");
    var demo = document.getElementById("demo");

    demo.width = 800 ;
    demo.height = 800 ;
    demo.style.border = "1px solid blue" ;
    var ctx = demo.getContext("2d");

    img.onload = function () {
        ctx.drawImage(img,200,100);
    }

</script>

</body>
</html>

效果图:

















































































  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值