• canvas的基本使用


    1、canvas的定义

    canvas 元素是HTML5中使用 JavaScript 在网页上绘制图像的

    示例一:基本的创建以及使用canvas
     

    1. <!DOCTYPE html>
    2. <html>
    3. <head>
    4. <meta charset="utf-8" />
    5. <title></title>
    6. <style type="text/css">
    7. * {
    8. margin: 0px;
    9. padding: 0px;
    10. }
    11. canvas {
    12. margin: auto;
    13. background-color: aqua;
    14. /* canvas一般不在style中设置宽高,会造成放大或缩小 */
    15. /* width: 600px;
    16. height: 400px; */
    17. }
    18. </style>
    19. </head>
    20. <body>
    21. <canvas id="myCanvas" width="600px" height="400px"></canvas>
    22. </body>
    23. <script>
    24. //canvas默认宽高是300*150
    25. let myCanvas = document.querySelector('#myCanvas')
    26. //获取一个 绘制上下文
    27. let context = myCanvas.getContext('2d');
    28. //IE以下不兼容,canvas绘制出来的图片是位图
    29. context.rect(100,100,300,40);
    30. //绘制路径
    31. //context.stroke(); //绘制路径,绘制空心 矩形
    32. context.fill(); //填充
    33. context.fillRect(100,150,300,40);
    34. context.strokeRect(100,200,300,40);
    35. //清空矩形区域
    36. context.clearRect(250,150,150,20);
    37. //在做大部分反复的特效的时候,基本上都需要用到这个清空的方法
    38. </script>
    39. </html>

    2、canvas使用步骤

    1、首先创建canvas元素

    <canvas id="myCanvas" width="600" height="400"></canvas>
    

    2、获取canvas元素

    let myCanvas = document.querySelector('#myCanvas');
    

    3、使用2D 绘图上下文

    let ctx = myCanvas.getContext('2d');
    

    4、绘制图形

    方法描述
    rect()创建矩形
    fillRect()绘制填充的矩形
    strokeRect()绘制无填充的矩形
    clearRect()矩形内清除指定的区域

    示例:

    1. <!DOCTYPE html>
    2. <html>
    3. <head>
    4. <meta charset="utf-8">
    5. <title></title>
    6. </head>
    7. <body>
    8. <canvas id="myCanvas" width="600" height="400"></canvas>
    9. </body>
    10. <script>
    11. let myCanvas = document.querySelector('#myCanvas');
    12. let ctx = myCanvas.getContext('2d');
    13. ctx.rect(100,100,300,40);
    14. //四种设置画笔的颜色
    15. ctx.fillStyle = 'yellow';
    16. // ctx.fillStyle = '#f00';
    17. // ctx.fillStyle = 'rgb(0,255,0)';
    18. // ctx.fillStyle = 'rgba(0,0,255,.5)';
    19. // ctx.fillStyle = 'hsl(0,100%,50%)';//色相饱和度亮度
    20. ctx.strokeStyle = 'black';
    21. // ctx.strokeStyle = '#f00';
    22. // ctx.strokeStyle = 'rgb(0,255,0)';
    23. // ctx.strokeStyle = 'rgba(0,0,255,.5)';
    24. // ctx.strokeStyle = 'hsl(0,100%,50%)';//色相饱和度亮度
    25. ctx.fill();
    26. ctx.stroke();
    27. ctx.fillRect(100,150,300,40);
    28. ctx.strokeRect(100,200,300,40);
    29. //设置线宽lineWidth
    30. ctx.lineWidth = 2;
    31. ctx.strokeRect(100,250,300,40);
    32. ctx.lineWidth = 3;
    33. ctx.strokeRect(99.5,299.5,300,40);
    34. // canvas的边框绘制,是从边框的中心开始绘制
    35. // 因为最小的绘制单位是1px,所以会出现 线宽 0.5的bug的问题
    36. // 所以一般绘制是偶数线宽绘制
    37. // 奇数绘制 也可以相应的减少0.5px
    38. </script>
    39. </html>

    五、绘制路径

    方法|描述
    fill()|填充当前绘图路径
    stroke()|绘制已定义的路径
    beginPath()|起始一条路径
    moveTo()|路径移动到画布中的哪个点
    closePath()|创建从移动到的位置点回到起始点的路径
    lineTo()|添加一个新点同时在canvas画布中创建当前点到最后指定点的路径

    1. <!DOCTYPE html>
    2. <html>
    3. <head>
    4. <meta charset="utf-8">
    5. <title></title>
    6. <style type="text/css">
    7. canvas{
    8. background-color: antiquewhite;
    9. }
    10. </style>
    11. </head>
    12. <body>
    13. <canvas id="myCanvas" width="600px" height="400px"></canvas>
    14. </body>
    15. <script>
    16. let myCanvas = document.querySelector('#myCanvas');
    17. let cxt = myCanvas.getContext('2d');
    18. cxt.lineWidth = 10;
    19. cxt.strokeStyle = 'red';
    20. //把笔移动到起始位置
    21. cxt.beginPath();
    22. cxt.moveTo(0,100);
    23. cxt.strokeStyle = 'blue';
    24. cxt.lineTo(600,100);
    25. cxt.stroke();
    26. cxt.beginPath()
    27. cxt.moveTo(500,0);
    28. cxt.strokeStyle = 'orange';
    29. cxt.lineTo(500,400);
    30. cxt.stroke();
    31. cxt.beginPath();
    32. cxt.moveTo(0,300);
    33. cxt.strokeStyle = 'black';
    34. cxt.lineTo(600,300);
    35. cxt.stroke();
    36. cxt.beginPath();
    37. cxt.moveTo(100,0);
    38. cxt.strokeStyle = 'magenta';
    39. cxt.lineTo(100,600);
    40. //笔触让浏览器绘制
    41. cxt.stroke();
    42. //strokeStyle会被后边的覆盖,可以加上beginPath做处理
    43. //每次开启路径,要指定 绘制方式(stroke或fill)
    44. //开启路径后,可以隔开与上一个的路径的关系,让 每次绘制 独立开来
    45. //闭合路径
    46. cxt.beginPath();
    47. cxt.moveTo(300,50);
    48. cxt.lineTo(500,100);
    49. cxt.lineTo(100,300);
    50. //自动闭合路径
    51. cxt.closePath();
    52. cxt.stroke();
    53. </script>
    54. </html>

    lineJoin属性

    可以选择边界连接处的样式

    属性值描述
    miter斜接
    round圆滑
    bevel折角

    代码示例:
     

    1. <!DOCTYPE html>
    2. <html>
    3. <head>
    4. <meta charset="utf-8">
    5. <title></title>
    6. <style type="text/css">
    7. canvas {
    8. background-color: #FAEBD7;
    9. }
    10. </style>
    11. </head>
    12. <body>
    13. <canvas id="myCanvas" width="600px" height="400px"></canvas>
    14. </body>
    15. <script>
    16. let myCanvas = document.querySelector('#myCanvas');
    17. let ctx = myCanvas.getContext('2d');
    18. ctx.lineWidth = 10;
    19. //边界连接处的样式
    20. //ctx.lineJoin = 'miter';
    21. //ctx.lineJoin = 'round'; //圆滑
    22. ctx.lineJoin = 'bevel'; //折角
    23. //闭合路径
    24. ctx.beginPath();
    25. ctx.moveTo(300,50);
    26. ctx.lineTo(500,100);
    27. ctx.lineTo(100,300);
    28. //自动闭合路径
    29. ctx.closePath();
    30. ctx.stroke();
    31. </script>
    32. </html>

    lineCap属性

    可以选择端点的样式

    属性值描述
    butt默认。向线条的每个末端添加平直的边缘。
    round向线条的每个末端添加圆形线帽
    square向线条的每个末端添加正方形线帽

    代码示例:

    1. <!DOCTYPE html>
    2. <html>
    3. <head>
    4. <meta charset="utf-8">
    5. <title></title>
    6. <style type="text/css">
    7. canvas {
    8. background-color: #FAEBD7;
    9. }
    10. </style>
    11. </head>
    12. <body>
    13. <canvas id="myCanvas" width="600px" height="400px"></canvas>
    14. </body>
    15. <script type="text/javascript">
    16. let myCanvas = document.querySelector('#myCanvas');
    17. let ctx = myCanvas.getContext('2d');
    18. ctx.lineWidth = 20;
    19. //ctx.strokeStyle = 'red';
    20. ctx.strokeStyle = 'black'
    21. ctx.beginPath();
    22. ctx.moveTo(100,100);
    23. ctx.lineTo(500,100);
    24. //端点的样式
    25. ctx.lineCap = 'butt';
    26. ctx.stroke();
    27. ctx.beginPath();
    28. ctx.moveTo(100,200);
    29. ctx.lineTo(500,200);
    30. //端点的样式
    31. ctx.lineCap = 'round';
    32. ctx.stroke();
    33. ctx.beginPath();
    34. ctx.moveTo(100,300);
    35. ctx.lineTo(500,300);
    36. //端点的样式
    37. ctx.lineCap = 'square';
    38. ctx.stroke();
    39. </script>
    40. </html>

  • 相关阅读:
    利用freesurfer6进行海马分割的环境配置和步骤,以及获取海马体积
    Pytorch下张量的形状操作(详细)
    PVE vi 编辑器方向键出现ABCD乱码
    Jmeter(十五):jmeter场景的运行方式详解
    国际结算习题集及答案
    阿里云服务器的公网ipv6地址申请与配置
    GBASE 8A v953报错集锦27--企业管理器执行投影列中含有重复列名的 sql 语句 报错
    C语言自定义类型_枚举&联合(3)
    单链表的头插法和尾插法的示例
    【SQL 中级语法 2】自连接的用法
  • 原文地址:https://blog.csdn.net/jingde528/article/details/127766860