当前位置:   article > 正文

js -画布中的各种图形与使用方法_js fillrect

js fillrect

原文地址:https://blog.csdn.net/qq_37674616/article/details/82702158

目录

画布

绘制矩形

绘制路径

示例

直线

示例

曲线

绘制文本

属性

方法

渐变

线性渐变

径向渐变

变形

组合

阴影

图像

平铺

裁剪


画布

绘制步骤:

         1.获取canvas元素

         2.获取2d上下文对象

         3.设置默认样式

         4.设置线宽

                   lineWidth=3;在边框绘制的时候使用

         5.绘制

状态:

     save()

            保存坐标、样式、阴影、线宽

    restore()

           恢复之前保存的样式

案例:绘制三个矩形,是最后一个样式与第一个相同

  1. <canvas id="canvas" width="400px" height="400px">不支持时显示</canvas>
  2. <script>
  3. var canvas=document.getElementById('canvas');
  4. var context=canvas.getContext('2d');
  5. context.strokeStyle="blue";
  6. context.strokeRect(10,10,100,100); //'blue'
  7. context.save();//保存绘制的样式 blue
  8. context.strokeStyle="orange";
  9. context.strokeRect(10,120,100,100); //'orange'
  10. context.restore(); //恢复到上一次保存的样式
  11. context.strokeRect(120,120,100,100); //'blue'
  12. context.stroke();
  13. </script>

绘制矩形

fillRect(startX,startY,w,h)

按fillSyle的样式显示填充的矩形。

strokeRect(startX,startX,w,h)

按 strokeStyle显示边框矩形。

clearRect(startX,startY,w,h)

用于清除矩形特定的区域。一般也用于清除画布。

示例

  1. <style>
  2. #canvas{
  3. border-left: 2px solid rgba(0,0,0,0.5);
  4. border-bottom: 2px solid rgba(0,0,0,0.5);
  5. }
  6. </style>
  7. <canvas id="canvas" width="400px" height="400px">不支持该属性</canvas>
  8. <script>
  9. var canvas=document.getElementById('canvas');
  10. var context=canvas.getContext('2d');
  11. context.fillStyle="skyblue"; //填充色
  12. context.strokeStyle='blue'; //边框色
  13. context.fillRect(0,300,30,100); //绘制填充矩形
  14. context.strokeRect(35,250,30,150); //绘制边框矩形
  15. context.fillRect(70,230,30,170);
  16. context.clearRect(80,265,10,100); //清除矩形某个区域面积
  17. </script>

 

绘制路径

步骤:

1.设置路径

 2.关闭路径

3.绘制

1.设置路径

          arc(圆心x,y,r,开始角度,结束角度,是否逆时针);true  逆时针  false 顺时针

2.关闭路径

         closePath()

3.绘制

                 fill()

                 stroke()

示例

  1. var canvas=document.getElementById('canvas');
  2. var context=canvas.getContext('2d');
  3. context.strokeStyle='blue';
  4. context.fillStyle='orange';
  5. context.lineWidth=3;
  6. context.beginPath();
  7. //参数 源圆心坐标 x y 半径 开始弧度,结束弧度,是否逆时针绘制 true逆时针
  8. context.arc(100,100,50,0,Math.PI/2,true);
  9. //结束路径
  10. context.closePath();
  11. //绘制
  12. context.stroke();
  13. //或者使用 context.fill() 绘制

直线

1.开始路径

        beginPath();

2. 设置路径

        moveTo(startx,starty);

        lineTo(endx,endy)

3.关闭路径

        closePath()

示例

  1. <canvas id="canvas" width="400px" height="400px"></canvas><script>
  2. var canvas=document.getElementById('canvas');
  3. var context=canvas.getContext('2d');
  4. context.strokeStyle="black";
  5. context.lineWidth=2;
  6. context.beginPath();
  7. //起点坐标
  8. context.moveTo(0,0);
  9. //结束点坐标
  10. context.lineTo(100,200);
  11. context.lineTo(100,100);
  12. context.lineTo(200,0);
  13. context.closePath();
  14. context.stroke();
  15. </script>

曲线

beizerCurveTo(x1,y1,x2,y2,endx,endy);

//x1 y1 x2 y2 为控制点坐标

quadraticCurveTo(控制点x,控制点y,endx,endy);

示例

  1. <canvas id="canvas" width="400px" height="400px"></canvas>
  2. <script>
  3. var canvas=document.getElementById('canvas');
  4. var context=canvas.getContext('2d');
  5. context.beginPath();
  6. //起点坐标
  7. context.moveTo(0,0);
  8. //控制点的x,y 控制点 x y 结束点x y
  9. // context.bezierCurveTo(200,10,200,300,400,400);
  10. //参考的 x y 结束点 x y
  11. context.quadraticCurveTo(150,10,200,200);
  12. context.quadraticCurveTo(230,350,400,400);
  13. context.closePath();
  14. //绘制
  15. context.stroke();
  16. </script>

绘制文本

属性

align

表示文本对齐方式

 type取值:start、end、left、center、right

textBaseline='type'

表示文本的基线。

           type常用取值: top、middle、bottom

font

表示文本样式、大小及字体,用 CSS 中指定字体的格式来指定例如: 'bold 15px 宋体';

方法

fillText('内容',startx,starty,maxWidth);

strokeText('内容',startx,starty,maxWidth);

示例

  1. <canvas id="canvas" width="400px" height="400px"></canvas>
  2. <img src="" alt="">
  3. <script>
  4. var canvas = document.getElementById('canvas');
  5. var img = document.getElementsByTagName('img')[0];
  6. var context = canvas.getContext('2d');
  7. //绘制文本
  8. //参数 文本内容 开始x y 最大w
  9. context.font = 'bold 20px 宋体';
  10. context.textAlign = 'left';
  11. context.textBaseline = '';
  12. context.fillText('你好', 200, 200, 30);
  13. context.beginPath();
  14. context.moveTo(0, 200);
  15. context.lineTo(200, 200);
  16. context.closePath();
  17. context.stroke();
  18. //导出位图
  19. var url = canvas.toDataURL('2.png');
  20. img.src = url;
  21. </script>

 

渐变

线性渐变

1.创建渐变

      var gradient=createLinearGradient(xstart,ystart,xend,yend);   

2.添加渐变颜色

          addColorStop(偏移量,颜色);//偏移量 0-1

3.设置渐变

      fillStyle=gradient;

径向渐变

创建步骤和线性渐变的步骤都相同

createRadialGradient(xstart,ystart,r,xstart,ystart,r);

示例

  1. <canvas id="canvas" width="400px" height="400px"></canvas>
  2. <script>
  3. var canvas=document.getElementById('canvas');
  4. var context=canvas.getContext('2d');
  5. //创建渐变对象
  6. // var gradient=context.createLinearGradient(0,0,200,0);
  7. //x,y r
  8. var gradient=context.createRadialGradient(100,100,20,100,100,100);
  9. gradient.addColorStop(0,'red');
  10. gradient.addColorStop(0.5,'orange');
  11. gradient.addColorStop(1,'blue');
  12. context.fillStyle=gradient;
  13. context.fillRect(10,10,200,200);
  14. </script>

 

 

变形

 操作的是坐标轴

translate(x偏移量,y偏移量)

scale(x轴放大的倍数,y轴放大的倍数)

      参数大于1 放大   参数小于1

rotate(角度)

       默认顺时针旋转,如果想逆时针旋转设定负数

示例

  1. <canvas id="canvas" width="400px" height="400px"></canvas>
  2. <script>
  3. var canvas=document.getElementById('canvas');
  4. var context=canvas.getContext('2d');
  5. context.fillStyle='red';
  6. //x y 轴偏移量
  7. context.translate(100,100);
  8. //坐标轴旋转45度
  9. //context.rotate(-Math.PI/4);
  10. //x轴缩小一半,y轴不变
  11. // context.scale(0.5,1);
  12. context.fillRect(0,0,200,200);
  13. context.fillRect(0,200,50,50);
  14. console.log(context);
  15. </script>

组合

设置新图形与旧图形的重叠方式和显示样式

        context.globalCompositePeration='type'

type取值

                source-over             默认 新图形在上

                destination-over    旧图形在上

                source-in            只显示新图形的重叠部分

                destination-in         只显示旧图形的重叠部分

                source-out            新的图形的不重叠部分

                destination-out     旧图形的不重叠部分

                source-atop         新图形的重叠部分和旧图形的不重叠部分

                destination-atop    旧图形的重叠部分和新图形的不重叠部分

                lighter             都显示 重叠部分加色处理

                xor                    都显示,重叠部分隐藏

                copy                 只显示新图形        

示例

  1. <canvas id="canvas" width="400px" height="400px"></canvas>
  2. <script>
  3. var canvas = document.getElementById('canvas');
  4. var context = canvas.getContext('2d');
  5. context.fillStyle = "blue";
  6. context.fillRect(0, 0, 200, 200);
  7. //设置重叠显示效果
  8. context.globalCompositeOperation = 'lighter';
  9. context.beginPath();
  10. context.fillStyle = "orange";
  11. context.arc(200, 200, 100, 0, Math.PI * 2);
  12. context.closePath();
  13. context.fill();
  14. </script>

阴影

shadowOffsetX=4

     x方向偏移

shadowOffsetY=4

        y方向偏移

shadowColor='red'

        阴影的颜色

shadowBlur=4

         模糊距离

示例

  1. <canvas id="canvas" width="400px" height="400px"></canvas>
  2. <script>
  3. var canvas=document.getElementById('canvas');
  4. console.log(canvas);
  5. var context=canvas.getContext('2d');
  6. context.fillStyle="blue";
  7. //x轴偏移量
  8. context.shadowOffsetX=5;
  9. //y轴偏移量
  10. context.shadowOffsetY=5;
  11. context.shadowColor='orange';
  12. //阴影模糊距离
  13. context.shadowBlur=10;
  14. context.fillRect(0,0,200,200);
  15. context.fill();
  16. </script>

图像

drawImage(img节点,x,y);

原图绘制

        drawImage(img节点,x,y,w,h);

缩放原图

        context.drawImage(img节点,区域x,y,w,h,endx,endy,w,h);

复制图像的一部分绘制到指定位置,并设置宽高

示例

  1. <canvas id="canvas" width="800px" height="600px"></canvas>
  2. <script>
  3. var canvas = document.getElementById('canvas');
  4. var context = canvas.getContext('2d');
  5. //绘制图像
  6. //1.创建图像对象
  7. var img = new Image();
  8. img.src = 'element.png';
  9. console.log(img);
  10. img.onload = function() {
  11. //参数 img节点,和开始绘制的位置x和y
  12. context.drawImage(img, 0, 0, 500, 500);
  13. // 参数 img节点 局部位置x,y 宽 高,目标位置x y 宽 高
  14. context.drawImage(img, 262, 235, 39, 17, 638, 292, 80, 40);
  15. }
  16. </script>

平铺

1.创建平铺对象

            var pattern=context.createPattern(img节点,类型);

            类型

                no-repeat

                repeat-x

                repeat-y

                repeat

2.使用

            context.fillStyle=pattern;

示例

  1. <canvas id="canvas" width="800px" height="600px"></canvas><script>
  2. var canvas = document.getElementById('canvas');
  3. var context = canvas.getContext('2d');
  4. //绘制图像
  5. //1.创建图像对象
  6. var img = new Image();
  7. img.src = '1.png';
  8. console.log(img);
  9. img.onload = function() {
  10. var pattern = context.createPattern(img, 'repeat');
  11. context.fillStyle = pattern;
  12. context.fillRect(0, 0, 300, 300);
  13. context.fill();
  14. }
  15. </script>

裁剪

要放到绘制的中间,将图片裁剪到绘制的路径中。

1.创建路径

            context.beginPath();

            context.arc(100,100,100,0,Math.PI*2);

            context.closePath();

 2.context.clip()

3.绘制图片

            context.drawImage(img,0,0);

示例

  1. <canvas id="canvas" width="800px" height="600px"></canvas>
  2. <script>
  3. var canvas = document.getElementById('canvas');
  4. var context = canvas.getContext('2d');
  5. //绘制图像
  6. //创建一个圆的路径
  7. context.beginPath();
  8. context.arc(150, 150, 150, 0, Math.PI * 2);
  9. context.closePath();
  10. //裁剪
  11. context.clip();
  12. //1.创建图像对象
  13. var img = new Image();
  14. img.src = '1.png';
  15. console.log(img);
  16. img.onload = function() {
  17. var pattern = context.createPattern(img, 'repeat');
  18. context.fillStyle = pattern;
  19. context.fillRect(0, 0, 300, 300);
  20. context.fill();
  21. }
  22. </script>

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/Monodyee/article/detail/468436
推荐阅读
相关标签
  

闽ICP备14008679号