当前位置: 首页 > news >正文

前端Canvas入门——一些注意事项

创建渐变的三种方法:

createLinearGradient() - 线性渐变

createRadialGradient() - 径向渐变(放射性渐变)

createConicGradient() - 锥形渐变

这三种的核心观点都是:

创建一个gradient对象,然后调用addColorStop()方法给这个对象添加渐变色。

区别就是里面的形参数量、含义不一样,需要注意。

有个特别需要注意的点:

createPattern()  - 图片画笔

你可以理解为这个方法就是创建一个新的画笔工具,然后使用这个工具去进行绘画。

举个例子:

        let img = new Image()img.src = './images/5.png'img.onload = () => {// 创建重复元素对象 - repeat是CSS中的内容let png = ctx.createPattern(img, 'repeat')// 类似于一个画笔ctx.fillStyle = pngctx.fillRect(0, 0, 400, 400)}

这几个方法你可以想象成创建一个画笔。

不同的是,有些是创建的时候就限制了画笔的大小。

比如说,createLinerGradient()里面就有关于生效的距离:

        const gradient = ctx.createLinearGradient(0, 0, 600, 400)gradient.addColorStop(0, 'red')gradient.addColorStop(0.5, 'yellow')gradient.addColorStop(1, 'blue')ctx.moveTo(0, 0)ctx.lineTo(400, 400)ctx.lineWidth = 30ctx.strokeStyle = gradientctx.stroke()

 

从上面的例子可以看出,如果你的线条长度小于渐变色的宽度(上文中渐变色的宽度是600,但是线条的宽度是400),那么渐变色有可能显示不全——丢失部分/全部蓝色渐变效果。

这是因为在gradient对象方法——addColorStop(0, '颜色')里面的0是指向量的长度,它的长度是这个向量跟下一个向量之间的长度。

比如说例子中的就是0-0.5之间就是从红色渐变到黄色,而0.5-1之间就是从黄色渐变到蓝色。


而有些则是不限制大小,只看你后续使用画笔来干什么。

比如说,例子1中的createPattern()就是看后续调用fillRect()的大小。

但如果你使用的是stroke()方法,就只会剩下一个边框:

今天就到这,bye~ 

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • AC修炼计划(AtCoder Regular Contest 179)A~C
  • python的简单爬取
  • Python面试题:如何在 Python 中解析 XML 文件?
  • PyFluent入门之旅(5)后处理
  • LLM-阿里云 DashVector + ModelScope 多模态向量化实时文本搜图实战总结
  • Typescript 中bind的使用
  • 后端登录校验——Filter过滤器和Interceptor拦截器
  • 【架构】分布式与微服务架构解析
  • 京准电钟|ptp精密时钟服务器在网络内作用是什么?
  • k8s record 20240710 监控
  • CCSI: 数据无关类别增量学习的持续类特定印象| 文献速递-基于深度学习的多模态数据分析与生存分析
  • Milvus 核心设计(1) ---- 数据一致性的等级及使用场景
  • linux nethogs网络监控程序(端口监控、流量监控、上传流量、下载流量、进程监控进程网络)
  • Linux程序替换
  • NAT地址转换+多出口智能选路,附加实验内容
  • (十五)java多线程之并发集合ArrayBlockingQueue
  • 【笔记】你不知道的JS读书笔记——Promise
  • 【跃迁之路】【641天】程序员高效学习方法论探索系列(实验阶段398-2018.11.14)...
  • AngularJS指令开发(1)——参数详解
  • Apache Spark Streaming 使用实例
  • CSS盒模型深入
  • hadoop入门学习教程--DKHadoop完整安装步骤
  • Kibana配置logstash,报表一体化
  • PaddlePaddle-GitHub的正确打开姿势
  • PHP那些事儿
  • Python_OOP
  • Python学习之路13-记分
  • React系列之 Redux 架构模式
  • SpringCloud(第 039 篇)链接Mysql数据库,通过JpaRepository编写数据库访问
  • Vue.js源码(2):初探List Rendering
  • 融云开发漫谈:你是否了解Go语言并发编程的第一要义?
  • 深度解析利用ES6进行Promise封装总结
  • 说说动画卡顿的解决方案
  • 学习HTTP相关知识笔记
  •  一套莫尔斯电报听写、翻译系统
  • Hibernate主键生成策略及选择
  • 好程序员大数据教程Hadoop全分布安装(非HA)
  • 积累各种好的链接
  • 曜石科技宣布获得千万级天使轮投资,全方面布局电竞产业链 ...
  • #QT(智能家居界面-界面切换)
  • (LNMP) How To Install Linux, nginx, MySQL, PHP
  • (阿里云万网)-域名注册购买实名流程
  • (翻译)Entity Framework技巧系列之七 - Tip 26 – 28
  • (牛客腾讯思维编程题)编码编码分组打印下标(java 版本+ C版本)
  • (七)理解angular中的module和injector,即依赖注入
  • (三)Kafka离线安装 - ZooKeeper开机自启
  • (推荐)叮当——中文语音对话机器人
  • .net core 依赖注入的基本用发
  • .NET Core6.0 MVC+layui+SqlSugar 简单增删改查
  • .net 按比例显示图片的缩略图
  • .NET/C# 编译期能确定的字符串会在字符串暂存池中不会被 GC 垃圾回收掉
  • .NET程序集编辑器/调试器 dnSpy 使用介绍
  • /etc/sudoers (root权限管理)
  • /usr/bin/env: node: No such file or directory
  • @AliasFor注解