• 【canvas】-- H5新增标签canvas的简单用法


    ♡ ‧₊˚  基本用法 ‧₊˚ ♡

    1. 获取canvas对象--获取画布
    2. 取得上下文(context)--获取画笔
    3. 定义填充样式 / 定义轮廓样式
    4. 绘制填充图形 / 绘制填充图形

    以下案例都是先在body里新建了一个宽高都为600px的canvas画布,再将案例里的代码放在script里执行:

        <canvas width="600px" height="600px">canvas>
    

    案例一:绘制一个矩形

    1. // 填充矩形
    2. window.onload=function(){
    3. // 1.获取画布
    4. var canvas = document.querySelector('canvas');
    5. // 2.获取画笔 上下文对象
    6. var content = canvas.getContext('2d');
    7. // 3.给图形设置填充样式
    8. content.fillStyle='pink'; // 实心填充
    9. // 4.绘制图形 绘制矩形
    10. // fillReact 参数: x轴起始位置, y轴起始位置, 宽, 高
    11. content.fillRect(0,0,200,200)
    12. }
    13. // 轮廓矩形
    14. window.onload=function(){
    15. // 1.获取画布
    16. var canvas = document.querySelector('canvas');
    17. // 2.获取画笔 上下文对象
    18. var content = canvas.getContext('2d');
    19. // 绘制轮廓矩形
    20. // 3.给图形设置填充样式
    21. content.strokeStyle='lightblue';
    22. // 给轮廓图形设置线宽
    23. content.lineWidth=10;
    24. //绘制轮廓矩形 参数: x轴起始位置, y轴起始位置, 宽, 高
    25. content.strokeRect(100,100,200,200);
    26. }

     

     案例二:绘制一个圆形

    注意:Math.PI 就代表180°,如果我们需要360°,则直接用Math.PI*2,如果我们需要60°,则直接用Math.PI/3

    1. window.onload=function(){
    2. // 1.获取画布
    3. var canvas=document.querySelector('canvas');
    4. // 2.获取上下文对象
    5. var content=canvas.getContext('2d');
    6. // 3.需要给一个开始路径
    7. content.beginPath();
    8. // 4.绘制圆 arc参数:x y开始的位置 r半径 开始弧度 Math.PI(180度) 结束弧度 布尔值(默认false顺时针,true为逆时针)
    9. content.arc(100, 100,100,0,Math.PI*2, true)
    10. // 5.绘制圆的样式
    11. content.fillStyle='yellow'
    12. // 6.绘制圆形
    13. content.fill();
    14. // 7.需要给结束路径
    15. content.closePath();
    16. }

    如果需要绘制轮廓圆,也只需要像轮廓矩形那样将 fill 改成 srtoke,其他步骤都一样:

    1. // 绘制轮廓圆
    2. content.strokeStyle='black';
    3. // 绘制轮廓圆
    4. content.stroke();

     

     案例三:圆的移动

    在这里我们需要先知道如何清除画布区域:

    1. // 清除画布部分区域
    2. content.clearRect(100,100,50,50)
    3. // 清除画布全部区域
    4. content.clearRect(0,0,400,400)

    接下来进行圆的移动:

    1. window.onload=function(){
    2. // 1.获取画布
    3. var canvas=document.querySelector('canvas');
    4. // 2.获取上下文对象
    5. var content=canvas.getContext('2d');
    6. var obj = {
    7. x:100,
    8. y:100,
    9. r:100,
    10. color:'green'
    11. };
    12. // 声明绘制圆的方法
    13. function draw(obj){
    14. content.beginPath();
    15. content.arc(obj.x,obj.y,obj.r,0,Math.PI*2);
    16. // 绘制填充⚪样式
    17. // content.fillStyle=obj.color;
    18. // 绘制圆
    19. content.fill();
    20. content.closePath();
    21. }
    22. // 声明移动圆的方法
    23. function move(obj){
    24. // 表示每次都向x轴与y轴移动5px
    25. obj.x+=5;
    26. obj.y+=5;
    27. draw(obj);
    28. }
    29. // 设置一个定时器,后面的参数500为0.5秒移动一次
    30. setInterval(function(){
    31. // 清除原先的圆
    32. content.clearRect(0,0,600,600);
    33. move(obj);
    34. },500);
    35. draw(obj);
    36. }

     案例四:线性渐变

    1. window.onload=function(){
    2. // 1.获取画布
    3. var canvas=document.querySelector('canvas');
    4. // 2.获取上下文对象
    5. var content=canvas.getContext('2d');
    6. // 3.绘制一个线性渐变图形
    7. // 3.1创建一个线性渐变对象
    8. // createLinearGradient(四个参数) 参数:渐变x、y轴开始位置 渐变结束x、y轴位置
    9. var L = content.createLinearGradient(0,0,400,400)
    10. // 3.2给渐变图形填充颜色
    11. L.addColorStop(0,'lightpink');
    12. L.addColorStop(0.2,'lightyellow');
    13. L.addColorStop(0.3,'lightgreen');
    14. L.addColorStop(0.5,'lightpink');
    15. L.addColorStop(0.8,'lightskyblue');
    16. L.addColorStop(1.0,'lightblue');
    17. // 4.将渐变对象给到图形填充样式
    18. content.fillStyle=L;
    19. // 5.绘制填充图形
    20. content.fillRect(0,0,400,400);
    21. }

    实现效果如下: 

      案例四:径向渐变(同心圆渐变)

    1. window.onload=function(){
    2. // 1.获取画布
    3. var canvas=document.querySelector('canvas');
    4. // 2.获取上下文对象
    5. var content=canvas.getContext('2d');
    6. // 3.绘制一个径向渐变图形
    7. // 3.1创建一个径向渐变对象
    8. // createRadialGradient(),参数:小圆 x y r 大圆 x y r
    9. var g = content.createRadialGradient(200,200,100,200,200,200)
    10. // 3.2给径向渐变图形填充颜色
    11. g.addColorStop(0,'lightpink');
    12. g.addColorStop(0.2,'pink');
    13. g.addColorStop(0.4,'lightyellow');
    14. g.addColorStop(0.6,'lightgreen');
    15. g.addColorStop(0.8,'lightpink');
    16. g.addColorStop(1.0,'lightblue');
    17. // 4.将渐变对象给到图形填充样式
    18. content.fillStyle=g;
    19. // 5.绘制填充图形
    20. content.fillRect(0,0,400,400);
    21. }

     实现效果如下:

       案例五:绘制线段

    1. window.onload=function(){
    2. var canvas=document.querySelector('canvas')
    3. var content = canvas.getContext('2d')
    4. content.lineWidth=8;
    5. // 线段开始路径
    6. content.beginPath();
    7. // 绘制线段 从哪里开始 从哪里结束
    8. content.moveTo(0,0);
    9. content.lineTo(100,100);
    10. content.lineTo(300,10);
    11. content.lineTo(300,100);
    12. // 设置颜色
    13. content.strokeStyle='cyan';
    14. // 绘制线段
    15. content.stroke();
    16. content.closePath();
    17. }

    实现效果如下:

     

        案例六:绘制图像 / 视频 / 文本

    1. window.onload=function(){
    2. var canvas=document.querySelector('canvas')
    3. var content = canvas.getContext('2d')
    4. // 创建一个img标签 构造函数方式new Image()
    5. var img = new Image();
    6. console.log(img);
    7. img.src="./音视频/音视频/3.jpg";
    8. // 绘制图片 参数:要绘制的图片/视频,开始的x,y轴位置,宽高
    9. img.onload=function(){
    10. content.drawImage(img, 0,0,300,200)
    11. }
    12. }

     

    绘制视频:

    1. // 绘制视频
    2. var video=document.querySelector('video');
    3. function draw(){
    4. content.drawImage(video,0,0,300,300)
    5. // 请求动画帧
    6. requestAnimationFrame(draw);
    7. //告诉浏览器你希望执行一个动画,并且要求浏览器在下次重绘之前调用指定得回调函数更新动画
    8. }
    9. draw();

    绘制文本:

    1. // 绘制文本
    2. content.font='18px bold';
    3. // 参数:文本,x y起始位置
    4. content.fillText('Hello',100,100)
    5. content.strokeText('Hello',100,100)

     

     

  • 相关阅读:
    八、【React拓展】错误边界
    带你深度解析虚幻引擎4的照明和阴影知识
    Linux系统目录管理
    Hadoop系列——Hadoop集群安装day2-1
    数据库数据恢复-Oracle数据库truncate的数据恢复案例
    java客户关系智能管理系统计算机毕业设计MyBatis+系统+LW文档+源码+调试部署
    Android中layout-sw600dp、layout-w600dp和layout-h600dp的区别
    总结一次系统底层学习笔记
    安装Xshell并使用其进行Ymodem协议的串口传输
    华为 Mate 60 Pro 拆解:陆制零件比率上升至47% | 百能云芯
  • 原文地址:https://blog.csdn.net/qq_48802092/article/details/126610227