canvas (2) 上色、渐变

本文介绍如何使用HTML5 Canvas API进行绘图,包括设置填充颜色、边框颜色及创建线性和径向渐变效果。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

上色

fillStyle

注: 要在绘画之前就设置好颜色,在绘画之后设置颜色是不管用的,不设置颜色值时默认值为黑色
绘制的图形的填充颜色
颜色值可以接受普通的(如: red),和十六进制(如: #fff)的,也支持rgb()和rgba()

栗子:这里看

<!DOCTYPE html>
<html>
<head>
  <meta charset="utf-8">
  <meta name="viewport" content="width=device-width">
  <title>JS Bin</title>
  <style>
    canvas {
      border: 1px solid black;
    }
  </style>
</head>
<body>
<canvas id="fillStyle" width="150" height="150"></canvas>
  <script>
    let canvas = document.getElementById('fillStyle');
    if (canvas.getContext) {
      var ctx = canvas.getContext('2d');
    }
    // 第一个红色矩形
    ctx.fillStyle = 'red'
    ctx.fillRect(10,10,50,50);
    // 第二个蓝色矩形
    ctx.fillStyle = 'blue';
    ctx.fillRect(70,10,50,50);
    // 第三个灰色矩形(十六进制颜色值)
    ctx.fillStyle = '#ddd';
    ctx.fillRect(10,80,50,50);
    // 第四个深蓝色矩形(rgb颜色值)
    ctx.fillStyle = 'rgb(45,68,159)';
    ctx.fillRect(70,80,50,50)
  </script>
</body>
</html>

效果如下:

这里写图片描述

strokeStyle

简单来说就是边框颜色

栗子: 这里看

<!DOCTYPE html>
<html>
<head>
  <meta charset="utf-8">
  <meta name="viewport" content="width=device-width">
  <title>JS Bin</title>
</head>
<body>
<!DOCTYPE html>
<html>
<head>
  <meta charset="utf-8">
  <meta name="viewport" content="width=device-width">
  <title>JS Bin</title>
  <style>
    canvas {
      border: 1px solid black;
    }
  </style>
</head>
<body>
<canvas id="strokeStyle" width="150" height="150"></canvas>
  <script>
    let canvas = document.getElementById('strokeStyle');
    if (canvas.getContext) {
      var ctx = canvas.getContext('2d');
    }
    ctx.strokeStyle = 'red';
    ctx.beginPath();
    ctx.moveTo(10,10);
    ctx.lineTo(10,60);
    ctx.lineTo(35,35);
    ctx.closePath();
    ctx.stroke();

    ctx.strokeStyle = 'rgb(14,76,75)';
    ctx.beginPath();
    ctx.moveTo(55,35);
    ctx.lineTo(80,10);
    ctx.lineTo(80,60);
    ctx.closePath();
    ctx.stroke();
  </script>
</body>
</html>
</body>
</html>

效果图:
这里写图片描述

渐变

线性渐变

createLinearGradient(x1,y1, x2, y2)

属性描述
x1, y1渐变起点坐标
x2, y2渐变终点坐标

addColorStop(position, color)

position: 渐变的位置
color: 渐变颜色值

设置好渐变坐标后,调用addColorStop方法来设置渐变位置以及颜色

栗子: 这里看

<!DOCTYPE html>
<html>
<head>
  <meta charset="utf-8">
  <meta name="viewport" content="width=device-width">
  <title>JS Bin</title>
</head>
<body>
<!DOCTYPE html>
<html>
<head>
  <meta charset="utf-8">
  <meta name="viewport" content="width=device-width">
  <title>JS Bin</title>
  <style>
    canvas {
      border: 1px solid black;
    }
  </style>
</head>
<body>
<canvas id="linear-gradient" width="150" height="150"></canvas>
  <script>
    let canvas = document.getElementById('linear-gradient');
    if (canvas.getContext) {
      var ctx = canvas.getContext('2d');
    }
    let linear = ctx.createLinearGradient(30,30,150,150);
    linear.addColorStop(0.1, 'red');
    linear.addColorStop(0.3, 'blue');
    linear.addColorStop(0.8, 'rgb(67,12,178)');
    ctx.fillStyle = linear;
    ctx.fillRect(0,0,150,150);
  </script>
</body>
</html>
</body>
</html>

效果图:

这里写图片描述

径向渐变

径向渐变稍微有点复杂
createRadialGradient( x1 ,y1, r1 , x2, y2 , r2 )

参数描述
x1, y1, r1(x1, y1)是起始圆的圆心, r1是起始圆的半径
x2, y2, r2(x2, y2)是终止圆的圆心, r2是终止圆的半径
分好几种情况:

起始圆和终止圆同一圆心,起始圆在终止圆里面

代码和效果可在这里

<!DOCTYPE html>
<html>
<head>
  <meta charset="utf-8">
  <meta name="viewport" content="width=device-width">
  <title>JS Bin</title>
</head>
<body>
<!DOCTYPE html>
<html>
<head>
  <meta charset="utf-8">
  <meta name="viewport" content="width=device-width">
  <title>JS Bin</title>
  <style>
    canvas {
      border: 1px solid black;
    }
  </style>
</head>
<body>
<canvas id="radial-gradient" width="300" height="300"></canvas>
  <script>
    let canvas = document.getElementById('radial-gradient');
    if (canvas.getContext) {
      var ctx = canvas.getContext('2d');
    }
let linear = ctx.createRadialGradient(150,150,30,150,150,100);
    linear.addColorStop(0.1, 'red');
    linear.addColorStop(0.3, 'blue');
    linear.addColorStop(0.8, 'yellow');
    ctx.fillStyle = linear;
    ctx.fillRect(0,0,300,300);
  </script>
</body>
</html>
</body>
</html>

效果图:

起始圆内是起始颜色
起始圆到终止圆之间部分是渐变部分,根据渐变位置慢慢渐变成终止色
终止圆外面为终止色

起始圆和终止圆同一圆心,终止圆在起始圆里面

代码和效果可在这里

<!DOCTYPE html>
<html>
<head>
  <meta charset="utf-8">
  <meta name="viewport" content="width=device-width">
  <title>JS Bin</title>
</head>
<body>
<!DOCTYPE html>
<html>
<head>
  <meta charset="utf-8">
  <meta name="viewport" content="width=device-width">
  <title>JS Bin</title>
  <style>
    canvas {
      border: 1px solid black;
    }
  </style>
</head>
<body>
<canvas id="radial-gradient" width="300" height="300"></canvas>
  <script>
    let canvas = document.getElementById('radial-gradient');
    if (canvas.getContext) {
      var ctx = canvas.getContext('2d');
    }
let linear = ctx.createRadialGradient(150,150,100,150,150,30);
    linear.addColorStop(0.1, 'red');
    linear.addColorStop(0.3, 'blue');
    linear.addColorStop(0.8, 'yellow');
    ctx.fillStyle = linear;
    ctx.fillRect(0,0,300,300);
  </script>
</body>
</html>
</body>
</html>

效果图:
这里写图片描述

终止圆内是终止色
终止圆到起始圆之间开始渐变,根据渐变位置慢慢渐变成起始色
起始圆外面是起始色

起始圆和终止圆不同圆心,起始圆在终止圆里面

代码和效果可在这里

<!DOCTYPE html>
<html>
<head>
  <meta charset="utf-8">
  <meta name="viewport" content="width=device-width">
  <title>JS Bin</title>
</head>
<body>
<!DOCTYPE html>
<html>
<head>
  <meta charset="utf-8">
  <meta name="viewport" content="width=device-width">
  <title>JS Bin</title>
  <style>
    canvas {
      border: 1px solid black;
    }
  </style>
</head>
<body>
<canvas id="radial-gradient" width="300" height="300"></canvas>
  <script>
    let canvas = document.getElementById('radial-gradient');
    if (canvas.getContext) {
      var ctx = canvas.getContext('2d');
    }
let linear = ctx.createRadialGradient(100,100,30,150,150,150);
    linear.addColorStop(0.1, 'red');
    linear.addColorStop(0.3, 'blue');
    linear.addColorStop(0.8, 'yellow');
    ctx.fillStyle = linear;
    ctx.fillRect(0,0,300,300);
  </script>
</body>
</html>
</body>
</html>

效果如下:

这里写图片描述

起始圆内是起始颜色
起始圆到终止圆之间部分是渐变部分,根据渐变位置慢慢渐变成终止色
终止圆外面为终止色

起始圆和终止圆不同圆心,终止圆在起始圆里面

代码和效果可在这里

<!DOCTYPE html>
<html>
<head>
  <meta charset="utf-8">
  <meta name="viewport" content="width=device-width">
  <title>JS Bin</title>
</head>
<body>
<!DOCTYPE html>
<html>
<head>
  <meta charset="utf-8">
  <meta name="viewport" content="width=device-width">
  <title>JS Bin</title>
  <style>
    canvas {
      border: 1px solid black;
    }
  </style>
</head>
<body>
<canvas id="radial-gradient" width="300" height="300"></canvas>
  <script>
    let canvas = document.getElementById('radial-gradient');
    if (canvas.getContext) {
      var ctx = canvas.getContext('2d');
    }
let linear = ctx.createRadialGradient(150,150,150,100,100,50);
    linear.addColorStop(0.1, 'red');
    linear.addColorStop(0.3, 'blue');
    linear.addColorStop(0.8, 'yellow');
    ctx.fillStyle = linear;
    ctx.fillRect(0,0,300,300);
  </script>
</body>
</html>
</body>
</html>

效果如下:

这里写图片描述

终止圆内是终止色
终止圆到起始圆之间开始渐变,根据渐变位置慢慢渐变成起始色
起始圆外面是起始色

两个圆相离

来两张图感受下

这里写图片描述

这里写图片描述

起始圆外是起始色
从起始圆最靠外边开始渐变,渐变结束在终止圆外侧,终止圆开始为终止色
终止圆外是终止色

两圆相交

这里写图片描述

若两圆同圆心,同半径,则屏幕什么都没有,空白

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值