前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >canvas 系列学习笔记三《样式和颜色》

canvas 系列学习笔记三《样式和颜色》

作者头像
星宇大前端
发布于 2022-09-28 04:46:38
发布于 2022-09-28 04:46:38
60200
代码可运行
举报
文章被收录于专栏:大宇笔记大宇笔记
运行总次数:0
代码可运行

1.颜色


1.1 概述

通过上下文可以设置strokeStyle (线条颜色) 和 fillStyle (填充颜色)。 设置完之后画线和填充就是设置的颜色。

1.2 代码示例

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
<!--
 * @Author: ZY
 * @Date: 2022-07-12 17:28:37
 * @LastEditors: ZY
 * @LastEditTime: 2022-07-14 15:16:48
 * @FilePath: /canvas-case/03-样式和颜色/01-颜色.html
 * @Description: 颜色
-->
<!DOCTYPE html>
<html lang="en">
  <head>
    <meta charset="UTF-8" />
    <meta http-equiv="X-UA-Compatible" content="IE=edge" />
    <meta name="viewport" content="width=device-width, initial-scale=1.0" />
    <title>颜色</title>
  </head>
  <body>
    <canvas id="canvas2d" width="200" height="200"></canvas>
  </body>
  <style>
    #canvas2d {
      border: 1px solid;
      display: block;
      margin: 0 auto;
    }
  </style>

  <script>
    let canvas2d = document.getElementById("canvas2d");
    if (canvas2d.getContext) {
      var ctx = canvas2d.getContext("2d");      
      ctx.strokeStyle = 'red'
      ctx.strokeRect(0,0,20,20)
      ctx.fillRect(20,0,20,20)
      ctx.fillStyle = 'rgba(255,0,0,1)'
      ctx.fillRect(40,0,20,20)
    }
  </script>
</html>

1.3 运行显示

2.透明度

2.1 概述

透明度主要通过两种方式改变:

  1. 通过添加strokeStylefillStyle 设置 rgba 颜色改变透明度
  2. 可以更改contextglobalAlpha 属性更改

2.2 代码示例

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
<!--
 * @Author: ZY
 * @Date: 2022-07-13 09:04:48
 * @LastEditors: ZY
 * @LastEditTime: 2022-07-13 09:53:09
 * @FilePath: /canvas-case/03-样式和颜色/02-透明度.html
 * @Description: 透明度
-->
<!DOCTYPE html>
<html lang="en">
  <head>
    <meta charset="UTF-8" />
    <meta http-equiv="X-UA-Compatible" content="IE=edge" />
    <meta name="viewport" content="width=device-width, initial-scale=1.0" />
    <title>透明度</title>
  </head>
  <body>
    <canvas id="canvas2d" width="500" height="500"></canvas>

  </body>
  <style>
    #canvas2d {
      border: 1px solid;
      display: block;
      margin: 0 auto;
    }
  </style>

  <script>
    let canvas2d = document.getElementById("canvas2d");
    if (canvas2d.getContext) {
      var ctx = canvas2d.getContext("2d");      
      for (let index = 0; index <10; index++) {
        ctx.strokeStyle = 'blue'
        ctx.globalAlpha = 0.03 * index
        ctx.arc(100, 100, 10 * index, 0, 2 * Math.PI);
        ctx.stroke()
      }
      ctx.moveTo(300, 300)
      ctx.beginPath()

      for (let i = 0; i <10; i++) {
        ctx.strokeStyle = 'rgba(0,0,255,0.03 * i)'
        ctx.arc(300, 300, 10 * i, 0, 2 * Math.PI);
        ctx.stroke()
      }
    }
  </script>
</html>

2.3 运行显示

3.线的样式

3.1 概述

线的样式主要有四个配置属性注意点:

  1. 线的宽度 lineWidth
  2. 设置线条末端样式 lineCap, ( butt 线段末端以方形结束;round:线段末端以圆形结束;square 线段末端以方形结束,但是增加了一个宽度和线段相同,高度是线段厚度一半的矩形区域)
  3. 设定线条与线条间接合处的样式 lineJoin (round: 圆形连接点;bevel:在相连部分的末端填充一个额外的以三角形为底的区域, 每个部分都有各自独立的矩形拐角。miter:通过延伸相连部分的外边缘,使其相交于一点,形成一个额外的菱形区域。这个设置可以通过 miterLimit 属性看到效果)
  4. 虚线

3.2 代码示例

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
<!--
 * @Author: ZY
 * @Date: 2022-07-13 09:55:24
 * @LastEditors: ZY
 * @LastEditTime: 2022-07-14 17:27:58
 * @FilePath: /canvas-case/03-样式和颜色/03-线的样式.html
 * @Description: 线的样式
-->
<!DOCTYPE html>
<html lang="en">
  <head>
    <meta charset="UTF-8" />
    <meta http-equiv="X-UA-Compatible" content="IE=edge" />
    <meta name="viewport" content="width=device-width, initial-scale=1.0" />
    <title>线的样式</title>
  </head>
  <body>
    <canvas id="canvas2d" width="500" height="500"></canvas>
  </body>
  <style>
    #canvas2d {
      border: 1px solid;
      display: block;
      margin: 0 auto;
    }
  </style>

  <script>
    let canvas2d = document.getElementById("canvas2d");
    if (canvas2d.getContext) {
      var ctx = canvas2d.getContext("2d");

      // lineWidth
      for (var i = 0; i < 10; i++) {
        ctx.lineWidth = 1 + i;
        ctx.beginPath();
        ctx.moveTo(5 + i * 14, 5);
        ctx.lineTo(5 + i * 14, 140);
        ctx.stroke();
      }

      // lineCap :  butt,round 和 square
      // 创建路径
      ctx.lineWidth = 1;
      ctx.strokeStyle = "#09f";
      ctx.beginPath();
      ctx.moveTo(150, 10);
      ctx.lineTo(290, 10);
      ctx.moveTo(150, 140);
      ctx.lineTo(290, 140);
      ctx.stroke();

      // 画线条
      var lineCap = ["butt", "round", "square"];
      ctx.strokeStyle = "black";
      for (var i = 0; i < lineCap.length; i++) {
        ctx.lineWidth = 15;
        ctx.lineCap = lineCap[i];
        ctx.beginPath();
        ctx.moveTo(170 + i * 50, 10);
        ctx.lineTo(170 + i * 50, 140);
        ctx.stroke();
      }

      // lineJoin: round, bevel 和 miter。
      var lineJoin = ["round", "bevel", "miter"];
      ctx.lineWidth = 10;
      ctx.translate(310, 10);
      for (var i = 0; i < lineJoin.length; i++) {
        ctx.lineJoin = lineJoin[i];
        ctx.beginPath();
        ctx.moveTo(-5, 5 + i * 40);
        ctx.lineTo(35, 45 + i * 40);
        ctx.lineTo(75, 5 + i * 40);
        ctx.lineTo(115, 45 + i * 40);
        ctx.lineTo(155, 5 + i * 40);
        ctx.stroke();
      }

      // 虚线
      var offset = 0;
      ctx.translate(-300, 140);
      ctx.lineWidth = 2

      function draw() {
        ctx.clearRect(0, 0, canvas2d.width, canvas2d.height);
        ctx.setLineDash([8, 10]);
        ctx.lineDashOffset = -offset;
        ctx.strokeRect(10, 10, 100, 100);
      }

      function march() {
        offset++;
        if (offset > 16) {
          offset = 0;
        }
        draw();
        setTimeout(march, 20);
      }

      march();
    }
  </script>
</html>

3.3 运行显示

4.线性渐变

4.1 概述

就好像一般的绘图软件一样,我们可以用线性或者径向的渐变来填充或描边。我们用下面的方法新建一个 canvasGradient 对象,并且赋给图形的 fillStyle 或 strokeStyle 属性。

createLinearGradient(x1, y1, x2, y2) createLinearGradient 方法接受 4 个参数,表示渐变的起点 (x1,y1) 与终点 (x2,y2)。

gradient.addColorStop(position, color) addColorStop 方法接受 2 个参数,position 参数必须是一个 0.0 与 1.0 之间的数值,表示渐变中颜色所在的相对位置。例如,0.5 表示颜色会出现在正中间。color 参数必须是一个有效的 CSS 颜色值(如 #FFF,rgba(0,0,0,1),等等)。

主要思路设置变色范围 和 颜色范围值

4.2 代码示例

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
<!--
 * @Author: ZY
 * @Date: 2022-07-12 17:28:37
 * @LastEditors: ZY
 * @LastEditTime: 2022-07-18 16:34:59
 * @FilePath: /canvas-case/03-样式和颜色/04-渐变.html
 * @Description: 颜色
-->
<!DOCTYPE html>
<html lang="en">
  <head>
    <meta charset="UTF-8" />
    <meta http-equiv="X-UA-Compatible" content="IE=edge" />
    <meta name="viewport" content="width=device-width, initial-scale=1.0" />
    <title>颜色</title>
  </head>
  <body>
    <canvas id="canvas2d" width="200" height="200"></canvas>
  </body>
  <style>
    #canvas2d {
      border: 1px solid;
      display: block;
      margin: 0 auto;
    }
  </style>

  <script>
    let canvas2d = document.getElementById("canvas2d");
    if (canvas2d.getContext) {
      var ctx = canvas2d.getContext("2d");
      var lingrad = ctx.createLinearGradient(0, 0, 100, 0);
      lingrad.addColorStop(0, "red");
      lingrad.addColorStop(1, "green");

      ctx.strokeStyle = lingrad;
      ctx.fillStyle = lingrad;

      ctx.lineWidth = 10;
      ctx.moveTo(0, 10);
      ctx.lineTo(150, 10);
      ctx.stroke();

      
      ctx.fillRect(25, 25, 50, 50);
      ctx.strokeRect(25, 125, 50, 50);


    }
  </script>
</html>

4.3 运行显示

5.圆形渐变

5.1 概述

其他和线性渐变一样,只是createLinearGradient 换成圆形 createRadialGradient

5.2 代码示例

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
<!--
 * @Author: ZY
 * @Date: 2022-07-12 17:28:37
 * @LastEditors: ZY
 * @LastEditTime: 2022-07-19 17:00:15
 * @FilePath: /canvas-case/03-样式和颜色/05-圆形渐变.html
 * @Description: 05-圆形渐变
-->
<!DOCTYPE html>
<html lang="en">
  <head>
    <meta charset="UTF-8" />
    <meta http-equiv="X-UA-Compatible" content="IE=edge" />
    <meta name="viewport" content="width=device-width, initial-scale=1.0" />
    <title>05-圆形渐变</title>
  </head>
  <body>
    <canvas id="canvas2d" width="200" height="200"></canvas>
  </body>
  <style>
    #canvas2d {
      border: 1px solid;
      display: block;
      margin: 0 auto;
    }
  </style>

  <script>
    let canvas2d = document.getElementById("canvas2d");
    if (canvas2d.getContext) {
      var ctx = canvas2d.getContext("2d");
      // 创建渐变
      var radgrad = ctx.createRadialGradient(45, 45, 10, 52, 50, 30);
      radgrad.addColorStop(0, "#A7D30C");
      radgrad.addColorStop(0.9, "#019F62");
      radgrad.addColorStop(1, "rgba(1,159,98,0)");

      var radgrad2 = ctx.createRadialGradient(105, 105, 20, 112, 120, 50);
      radgrad2.addColorStop(0, "#FF5F98");
      radgrad2.addColorStop(0.75, "#FF0188");
      radgrad2.addColorStop(1, "rgba(255,1,136,0)");

      var radgrad3 = ctx.createRadialGradient(95, 15, 15, 102, 20, 40);
      radgrad3.addColorStop(0, "#00C9FF");
      radgrad3.addColorStop(0.8, "#00B5E2");
      radgrad3.addColorStop(1, "rgba(0,201,255,0)");

      var radgrad4 = ctx.createRadialGradient(0, 150, 50, 0, 140, 90);
      radgrad4.addColorStop(0, "#F4F201");
      radgrad4.addColorStop(0.8, "#E4C700");
      radgrad4.addColorStop(1, "rgba(228,199,0,0)");

      // 画图形
      ctx.fillStyle = radgrad4;
      ctx.fillRect(0, 0, 150, 150);
      ctx.fillStyle = radgrad3;
      ctx.fillRect(0, 0, 150, 150);
      ctx.fillStyle = radgrad2;
      ctx.fillRect(0, 0, 150, 150);
      ctx.fillStyle = radgrad;
      ctx.fillRect(0, 0, 150, 150);
    }
  </script>
</html>

5.3 运行显示

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2022-09-07,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
canvas详细教程! ( 近1万字吐血总结)
今天为大家带来的是我已经写了很久了的canvas详细教程,按照文章的案例一个一个敲下来保证你可以学会绘制很多图案和动画,对入门canvas很有帮助!
用户9999906
2022/12/22
4.1K0
Canvas
http://www.w3c.org/TR/2dcontext/ https://html.spec.whatwg.org/
jinghong
2020/05/09
13.2K0
Canvas
canvas绘制折线路径动画
要实现以上路径动画,一般可以使用svg的动画功能。或者使用canvas绘制,结合路径数学计算来实现。
用户3158888
2022/03/22
1.6K0
canvas绘制折线路径动画
❤️创意网页:打造炫酷网页 - 旋转彩虹背景中的星星动画
在这个技术博客中,我们将学习如何使用HTML5 Canvas和JavaScript创建一个炫酷的网页效果。我们将打造一个动态的旋转彩虹背景,并在其中添加一个可爱的旋转星星动画。通过本博客,您将了解如何使用Canvas绘制彩虹渐变背景和绘制旋转的星星,以及如何通过动画实现星星的旋转效果。
命运之光
2024/03/20
2730
❤️创意网页:打造炫酷网页 - 旋转彩虹背景中的星星动画
第155天:canvas(二)
​ 这个属性影响到 canvas 里所有图形的透明度,有效的值范围是 0.0 (完全透明)到 1.0(完全不透明),默认是 1.0。
半指温柔乐
2018/09/11
5080
第155天:canvas(二)
Canvas 从进阶到退学
接着 《Canvas 从入门到劝朋友放弃(图解版)》 ,本文继续补充 canvas 基础知识点。
德育处主任
2022/12/13
2.1K0
Canvas 从进阶到退学
canvas学习笔记(八)—- 基本动画
1.用window.setInterVal()、window.setTimeOut()和window.requestAnimationFrame()来定期执行一个指定函数
Java架构师必看
2021/08/19
7010
H5和微信小游戏 Canvas API 整理前言
这段时间闲下来,系统学习了微信小程序和微信小游戏,发现还是挺有意思的。现在微信小游戏的开发都离不开游戏引擎,用原生小游戏开发工具开发的很少很少。但是毕竟我不是专业游戏开发,所有游戏引擎就不搞了,我们就单纯来看原生微信小游戏开发。
大公爵
2018/10/10
3K0
H5和微信小游戏 Canvas API 整理前言
HTML <canvas> 项目 画个房子
华健课堂
2024/10/21
1850
Canvas
注意canvas 的 width 和 height 不要用 css 来设定,如果用 css 样式来设置,会变形和失真
小丞同学
2021/08/16
1.3K0
h5逐步实现 <<canvas系统>>
第三:让canvas绘图可以画整个body.并且要设置线条的宽度+线条结束时候的形状+两天线条相交时的形状.+线条的颜色.
贵哥的编程之路
2020/10/28
3700
h5逐步实现 <<canvas系统>>
【Canvas】入门 - 实现图形以及图片绘制
<canvas width="300" height="300"></canvas>
且陶陶
2023/04/12
1.2K0
H5之 Canvas图形实现
<canvas id="mycanvas" width="100" height="100">测试浏览器</canvas>
张哥编程
2024/12/17
650
H5之 Canvas图形实现
三天学会HTML5——SVG和Canvas的使用
在第一天学习了HTML5的一些非常重要的基本知识,今天将进行更深层学习 首先来回顾第一天学习的内容,第一天学习了新标签,新控件,验证功能,应用缓存等内容。 第2天将学习如何使用Canvas 和使用SVG 实现功能 Lab1—— 使用Canvas Canvas 是指定了长度和宽度的矩形画布,我们将使用新的HTML5 JavaScript,可使用HTML5 JS API 来画出各种图形。 初始化 1. 创建HTML页面 <html> <head></head> <body></body> </html> 2.
葡萄城控件
2018/01/10
2.8K0
三天学会HTML5——SVG和Canvas的使用
canvas的api的学习(一)
Canvas是 HTML5 新增的,一个可以使用脚本(通常为JavaScript)在其中绘制图像的 HTML 元素。它可以用来制作
前端老鸟
2019/07/31
4280
H5-使用canvas绘制
canvas标签用于绘制图画,它是通过js来实现图画的绘制,这里将学习一下其基本用法。 首先,创建一个画布,这样我们就可以在上面进行创作了。
kdyonly
2023/03/03
9480
①万字《详解canvas api画图》小白前端入门教程(建议收藏)
在页面中增加一个canvas元素就相当于在网页中添加一块画布,之后就可以利用一系列的绘图指令,在“画布”上绘制图形。
不吃西红柿
2022/09/19
6720
①万字《详解canvas api画图》小白前端入门教程(建议收藏)
第156天:canvas(三)
​ translate方法接受两个参数。x 是左右偏移量,y 是上下偏移量,如右图所示。
半指温柔乐
2018/09/11
5350
第156天:canvas(三)
Canvas入门到高级详解(中)
以上两个值都可以接受颜色名,16 进制数据,rgb 值,甚至 rgba. 一般先进行设置样式然后进行绘制。
老马
2019/05/25
2K0
Day 3 学习Canvas这一篇文章就够了
一、canvas简介 ​ <canvas> 是 HTML5 新增的,一个可以使用脚本(通常为JavaScript)在其中绘制图像的 HTML 元素。它可以用来制作照片集或者制作简单(也不是那么简单)的动画,甚至可以进行实时视频处理和渲染。 ​ 它最初由苹果内部使用自己MacOS X WebKit推出,供应用程序使用像仪表盘的构件和 Safari 浏览器使用。 后来,有人通过Gecko内核的浏览器 (尤其是Mozilla和Firefox),Opera和Chrome和超文本网络应用技术工作组建议为下一代的网络技术使用该元素。 ​ Canvas是由HTML代码配合高度和宽度属性而定义出的可绘制区域。JavaScript代码可以访问该区域,类似于其他通用的二维API,通过一套完整的绘图函数来动态生成图形。 ​ Mozilla 程序从 Gecko 1.8 (Firefox 1.5)开始支持 <canvas>, Internet Explorer 从IE9开始<canvas> 。Chrome和Opera 9+ 也支持 <canvas>。 二、Canvas基本使用 2.1 <canvas>元素
IT人一直在路上
2019/09/16
1.1K0
Day 3 学习Canvas这一篇文章就够了
相关推荐
canvas详细教程! ( 近1万字吐血总结)
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验