前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >在 Vue3中使用Fabric.js实现渐变(Gradient)效果,包括径向渐变radial

在 Vue3中使用Fabric.js实现渐变(Gradient)效果,包括径向渐变radial

作者头像
德育处主任
发布2022-04-15 14:22:34
2.6K0
发布2022-04-15 14:22:34
举报
文章被收录于专栏:前端数据可视化

theme: smartblue

Fabric.js 简介

点击图片跳转到FabricJS官网
点击图片跳转到FabricJS官网

用官方的话来讲

Fabric.js 是一个强大而简单的 Javascript HTML5 canvas 工具库

简单来说,如果你需要用 canvas 做特效或者做交互,那不妨试试 Fabric.js 这个库,它会使开发更加简单和直观。

本文使用的开发环境

本文案例中使用了 Fabric.js 4.6 这个版本。

使用了 Vite 构建 Vue3 项目。

搭建项目

代码语言:javascript
复制
npm init @vitejs/app

选择 Vue3,之后再根据提示初始化项目即可。

安装 Fabric.js

代码语言:javascript
复制
npm install fabric --save

为什么本文只写渐变?

渐变Fabric.js 的基础功能,但网上大部分文章都只写 线性渐变,很少有写到径向渐变的,因为官方好像也没给出径向渐变的例子。

甚至还见过有些文章和评论说 Fabric.js 只支持线性渐变。但这个说法是错的!!!

没错,本文只想证明在 Fabric.js 4.6版本中是可以实现径向渐变的。

线性渐变 linear

代码语言:javascript
复制
<template>
  <canvas width="600" height="600" id="canvas" style="border: 1px solid #ccc;"></canvas>
</template>

<script setup>
import { onMounted } from 'vue'
import { fabric } from 'fabric'

function init() {
  let canvas = new fabric.Canvas('canvas') // 实例化fabric,并绑定到canvas元素上

  // 圆
  let circle = new fabric.Circle({
    left: 100,
    top: 100,
    radius: 50,
  })

  // 线性渐变
  let gradient = new fabric.Gradient({
    type: 'linear', // linear or radial
    gradientUnits: 'pixels', // pixels or pencentage 像素 或者 百分比
    coords: { x1: 0, y1: 0, x2: circle.width, y2: 0 }, // 至少2个坐标对(x1,y1和x2,y2)将定义渐变在对象上的扩展方式
    colorStops:[ // 定义渐变颜色的数组
      { offset: 0, color: 'red' },
      { offset: 0.2, color: 'orange' },
      { offset: 0.4, color: 'yellow' },
      { offset: 0.6, color: 'green' },
      { offset: 0.8, color: 'blue' },
      { offset: 1, color: 'purple' },
    ]
  })
  circle.set('fill', gradient);
  canvas.add(circle)
}

onMounted(() => {
  init()
})
</script>

径向渐变 radial

跳转到线上预览
跳转到线上预览
代码语言:javascript
复制
<template>
  <canvas width="600" height="600" id="canvas" style="border: 1px solid #ccc;"></canvas>
</template>

<script setup>
import { onMounted } from 'vue'
import { fabric } from 'fabric'

function init() {
  let canvas = new fabric.Canvas('canvas')  // 实例化fabric,并绑定到canvas元素上

  // 圆
  let circle = new fabric.Circle({
    left: 100,
    top: 100,
    radius: 50,
  })

  let gradient = new fabric.Gradient({
    type: 'radial',
    coords: {
      r1: 50, // 该属性仅径向渐变可用,外圆半径
      r2: 0, // 该属性仅径向渐变可用,外圆半径  
      x1: 50, // 焦点的x坐标
      y1: 50, // 焦点的y坐标
      x2: 50, // 中心点的x坐标
      y2: 50, // 中心点的y坐标
    },
    colorStops: [
      { offset: 0, color: '#fee140' },
      { offset: 1, color: '#fa709a' }
    ]
  })

  circle.set('fill', gradient);
  canvas.add(circle)
}

onMounted(() => {
  init()
})
</script>

r1r2x1y1x2y2 这几个参数可以自己修改值然后看看效果,自己亲手改一下会理解得更深刻。

仓库地址

跳转到线上预览
跳转到线上预览
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2021/10/24 ,如有侵权请联系 cloudcommunity@tencent.com 删除

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

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

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

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • theme: smartblue
  • Fabric.js 简介
  • 本文使用的开发环境
    • 搭建项目
      • 安装 Fabric.js
      • 为什么本文只写渐变?
      • 线性渐变 linear
      • 径向渐变 radial
      • 仓库地址
      领券
      问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档