Canvas之颜色渐变

Canvas之颜色渐变

线性渐变

js 复制代码
const gradient = ctx.createLinearGradient(0, 0, 400, 400)
gradient.addColorStop(0, '#f00');
gradient.addColorStop(0.5, '#0f0');
gradient.addColorStop(1, '#00f');
ctx.fillStyle = gradient;
ctx.fillRect(0, 0, 400, 400);

我们使用 ctx.createLinearGradient 来创建一个渐变对象,可以传入两个点的坐标,来表示渐变的方向。渐变方向可以是横向,纵向或者斜向,但这个坐标是基于画布坐标系的。如果渐变区域和图形区域相同,则正好可以显示出来,如果渐变区域大,则只能显示一部分,渐变区域小,则会将渐变区域两边拉长到图形区域。

使用 gradient.addColorStop 来对创建的对象添加渐变的颜色。第一个是比例,第二个是颜色。这和 css 设置类似。并且和图案填充类似,可以设置填充样式或描边样式为已创建的渐变对象。

径向渐变

js 复制代码
const gradient= ctx.createRadialGradient(200, 200, 50, 200, 200, 100);
gradient.addColorStop(0, '#f00');
gradient.addColorStop(0.5, '#0f0');
gradient.addColorStop(1, '#00f');
ctx.fillStyle = gradient;
ctx.arc(200,200,200,0,Math.PI*2)
ctx.fill();
ctx.stroke();

除了线形之外,我们可以由里向外或由外向里的进行径向渐变,类似利用圆的半径进行渐变。设置两个圆的坐标,半径,从第一个圆向第二个圆渐变。注意,一定要是大圆包小圆,如果重合就没有渐变效果,如果没有完全包含画面会显示异常。

和前面类似,如果渐变区域不够大,就会将边缘拉长到图形区域。放在矩形或圆形上都可以。

锥形渐变

js 复制代码
const gradient= ctx.createConicGradient(Math.PI/2,200,200);
gradient.addColorStop(0, '#f00');
gradient.addColorStop(0.5, '#0f0');
gradient.addColorStop(1, '#ff0');
ctx.fillStyle = gradient;
ctx.arc(200,200,200,0,Math.PI*2)
ctx.fill();
ctx.stroke();

ctx.beginPath();
ctx.fillStyle = '#fff';
ctx.arc(200,200,100,0,Math.PI*2)
ctx.fill();

锥形渐变是在绕着一个圆去进行渐变,不需要去设置半径,好像在一个无限扩散的锥形,不需要半径的设置。需要一个起始角度,这个角度和之前一样使用弧度表示,并且默认在x轴右侧为0度。

相关推荐
A923A18 分钟前
【从零开始学 React | 第四章】useEffect和自定义Hook
前端·react.js·fetch·useeffect
ZC跨境爬虫22 分钟前
批量爬取小说章节并优化排版(附完整可运行脚本)
前端·爬虫·python·自动化
ZC跨境爬虫24 分钟前
海南大学交友平台登录页开发实战day4(解决python传输并读取登录信息的问题)
开发语言·前端·python·flask·html
来一颗砂糖橘27 分钟前
pnpm:现代前端开发的高效包管理器
前端·pnpm
前端摸鱼匠28 分钟前
Vue 3 的defineProps编译器宏:详解<script setup>中defineProps的使用
前端·javascript·vue.js·前端框架·ecmascript
木斯佳29 分钟前
前端八股文面经大全: 美团财务科技前端一面 (2026-04-09)·面经深度解析
前端·实习面经·前端初级
天外天-亮29 分钟前
Vue2.0 + jsmind:开发思维导图
javascript·vue.js·jsmind
LIO32 分钟前
React 零基础入门,一篇搞懂核心用法(适合新手)
前端·react.js
TeamDev1 小时前
JxBrowser 8.18.2 版本发布啦!
java·前端·跨平台·桌面应用·web ui·jxbrowser·浏览器控件
netkiller-BG7NYT1 小时前
yoloutils - Openclaw Agent Skill
前端·webpack·node.js