【H5 Canvas】一篇通

news/2024/11/7 8:29:14/

文章目录

        • Canvas的创建(HTMLCanvasElement)
        • 图形绘制:H5为Canvas对应的2D上下文Context提供了一系列的画图接口
        • 保存save、恢复restore、变换Transformations

Canvas的创建(HTMLCanvasElement)
  • 定义canvas HTML元素,默认长宽300x150
<canvas width="300" height="150" >你的浏览器不支持Canvas
</canvas>
  • 通过JavaScript脚本创建
let canvas = document.createElement("canvas");
图形绘制:H5为Canvas对应的2D上下文Context提供了一系列的画图接口
  • 获取Context(CanvasRenderingContext2D)
let context = canvas.getContext("2d");
  • 矩形的绘制(填充、清除、轮廓)(x坐标,y坐标,宽度,高度)
context.fillStyle = "rgb(200,0,0)"; // 设置填充颜色
context.strokeStile = "rgb(0,200,0)" // 设置轮廓颜色
context.fillRect (90, 90, 190, 190);// 填充一个大区域
context.clearRect(130,130,110,110);// 清除中间一个区域
context.strokeRect(150,150,70,70);// 在清除的区域中画一个矩形轮廓

在这里插入图片描述

  • 直线的绘制(需要借助stroke函数)
context.strokeStyle="purple"; //设置线条颜色
context.lineCap="round";//端点样式为圆形
context.lineWidth=10;//线条宽度10
context.moveTo(10,10);//线条开始左边
context.lineTo(200,120);//线条结束坐标
context.stroke()// 借助stroke显示线条

在这里插入图片描述

  • 圆弧的绘制(填充、轮廓,需要借助fill,stroke函数)(x坐标,y坐标,半径,开始弧度,结束弧度,是否逆时针)
context.beginPath();// 开启一个新路径
context.fillStyle='yellow' // 上面大半圆填充为黄色
context.arc(75, 75, 50, 0, Math.PI, true);
context.fill() // 填充让上面大半圆显示出来
context.beginPath();//如果没有这一行,最后填充将使用下面pink
context.fillStyle='pink' // 下面半圆填充为粉色
context.strokeStyle='black' // 下面半圆轮廓为黑色
context.arc(75, 75, 35, 0, Math.PI, false);//顺时针绘制下面小半圆
context.fill();// 显示下半圆填充
context.stroke();// 只对下面半圆画轮廓

在这里插入图片描述

  • 图片绘制
context.fillStyle='pink';
context.fillRect(0,0,300,150)
// context.drawImage(img,srcx,srcy);
context.drawImage(img,10,10);

在这里插入图片描述

context.fillStyle='pink';
context.fillRect(0,0,300,150)
// context.drawImage(img,srcx,srcy,src,srcwith,srcheight);
context.drawImage(img,10,10,100,100);

在这里插入图片描述

context.fillStyle='pink';
context.fillRect(0,0,300,150)
// context.drawImage(img,srcx,srcy,srcw,srch,dstx,dsty,dstw,dsth);
context.drawImage(img,20,20,110,110,90,10,120,120);

在这里插入图片描述

  • 渐变绘制(需要借助fill/fillRect函数)
let linGrad = context.createLinearGradient(0, 0, 250, 0);// 渐变方向,水平方向从左往右
linGrad.addColorStop(0, "lime");
linGrad.addColorStop(0.5, "navy");
linGrad.addColorStop(1, "pink");
context.fillStyle = linGrad;
context.fillRect(10, 10, 280, 120); // 填充渐变

在这里插入图片描述

保存save、恢复restore、变换Transformations
  • 保存save和恢复restore结对使用,用于将当前canvas的状态(旋转,缩放,迁移)进行入栈保存/出栈恢复操作

  • translate 改变坐标原点

context.fillStyle='red';
context.fillRect(0,0,300,150);context.save(); // 保存当前canvas状态,坐标原点为0,0context.translate(150,75); //将坐标迁移道中心点150,75
context.fillStyle='silver';
context.fillRect(0,0,300,150);//此时0,0 相对于新坐标原点150,75context.restore(); //恢复到坐标原点为0,0
context.fillStyle='pink';
context.fillRect(0,0,60,60);

在这里插入图片描述

  • scale x,y坐标缩放
context.fillStyle='red';
context.fillRect(0,0,300,150);context.save(); // 保存当前canvas状态,坐标比例1:1context.scale(.5,.5); //缩小为原来坐标的一半,1:0.5
context.fillStyle='silver';
context.fillRect(0,0,300,150);//此时300相当于150,150相当于75context.restore(); //恢复到坐标比例1:1
context.fillStyle='pink';
context.fillRect(0,0,60,60);

在这里插入图片描述

  • rotate 图形旋转
context.lineWidth=5;
// 没有旋转下 水平画紫色线
context.beginPath();
context.strokeStyle="purple"; 
context.moveTo(10,10);
context.lineTo(300,10);
context.stroke()context.save(); // 保存当前canvas状态,没有旋转
// 旋转下,水平画黑线
context.rotate(Math.PI/4); //将坐标旋转45度
context.beginPath();
context.strokeStyle="black"; 
context.moveTo(10,10);
context.lineTo(300,10);
context.stroke()context.restore(); //恢复到不旋转
// 没有旋转下 水平画绿色线
context.beginPath();
context.strokeStyle="green"; 
context.moveTo(10,20);
context.lineTo(300,20);
context.stroke()

![在这里插入图片描述](https://img-blog.csdnimg.cn/448609dc1a5b432db18c0c98b92baba3.png


http://www.ppmy.cn/news/1241545.html

相关文章

快速压缩:迅速减小PDF文件大小的步骤与技巧

虽然png图片格式是一种无损压缩格式&#xff0c;但是png图片的内存大小也是比较大的&#xff0c;而且兼容性上也没有jpg图片好&#xff0c;许多平台推荐的也都是jpg格式&#xff0c;所以当我们需要把png转jpg格式的时候&#xff0c;就需要用到图片格式转换器&#xff0c;今天推…

HarmonyOS应用开发者高级认证【题库答案】

HarmonyOS应用开发者基础认证【题库答案】 一、判断题 云函数打包完成后&#xff0c;需要到AppGallery Connect创建对应函数的触发器才可以在端侧中调用&#xff08;错&#xff09;在column和Row容器组件中&#xff0c;aligntems用于设置子组件在主轴方向上的对齐格式&#xf…

ElasticSearch之配置

ElasticSearch主要的配置文件&#xff0c;如下&#xff1a; elasticsearch.yml&#xff0c;ElasticSearch的相关参数。jvm.options&#xff0c;JVM的相关参数。log4j2.properties&#xff0c;日志的相关参数。 默认情况下&#xff0c;ElasticSearch从$ES_HOME/config目录下读…

OpenCV快速入门:相机标定——单目视觉和双目视觉

文章目录 前言一、相机标定的基本原理1.1 相机模型与坐标系1.1.1 相机模型1.1.2 坐标系 1.2 相机内参与外参1.2.1 内部参数1.2.2 外部参数 1.3 镜头畸变1.4 透视变换1.5 标定的重要性和应用场景 二、单目视觉2.1 单目视觉的原理2.1.1 单目视觉的原理2.1.2 单目视觉的公式2.1.3 …

Linux操作系统之apt常用命令记录

文章目录 apt 命令apt 语法apt 常用命令列出所有可更新的软件清单命令升级软件包列出可更新的软件包及版本信息升级软件包&#xff0c;升级前先删除需要更新软件包安装指定的软件命令&#xff1a;安装多个软件包&#xff1a;更新指定的软件命令显示软件包具体信息,例如&#xf…

小程序如何禁止指定用户访问?如何设置指定用户才能访问?

​有些商家为了价格保密或者实行严格的会员制等原因&#xff0c;希望小程序能够限制某些人的访问或者设置指定人员才能访问。这种功能在小程序中&#xff0c;怎么支持这些功能呢&#xff1f;下面具体介绍。 一、禁止指定用户访问 禁止指定用户访问&#xff0c;可以通过小程序…

cesium轨迹线(闪烁轨迹线)

cesium轨迹线(闪烁轨迹线) 下面有源码 实现思路 使用ellipse方法加载圆型,修改polyline中‘material’方法重写glsl来实现当前效果(cesium版本1.109) 示例代码 index.html <!DOCTYPE html> <html lang="en"><head

Win10/Win11 使用Wsl的Ubuntu 子系统搭建CGO环境,相当于Ubuntu下开发。GO环境CGO搭建,支持交叉编译

背景&#xff1a; 之前是使用Mac 开发&#xff0c;最近切换到win11下面。发现使用cgo编译有问题。 下面记载了我的使用方法。 环境&#xff1a; win11&#xff08;win10理论一样&#xff09; win11 安装了wsl2的环境&#xff0c;并且安装了ubuntu系统。 在win11 上面安装了g…