实现效果

效果一:

效果二:

实现思路

  • canvas实现

1. 绘制三角形
  1. // html
  2. <canvas id="triangle" width="30" height="30">
  3. Your browser does not support the canvas element.
  4. </canvas>
  5. // javascript
  6. var triangle: any = document.getElementById("triangle");
  7. var ctx = triangle.getContext("2d"); // canvas 绘制区域
  8. ctx.beginPath(); // 开始绘制
  9. ctx.moveTo(0, 0); // 起点A(0,0)
  10. ctx.lineTo(30, 0); // 从起点A(0,0)绘制到B(30,0)
  11. ctx.lineTo(15, 16); // 从B(30,0)绘制到C(15,16)
2. 设置渐变色并填充
  1. // javascript
  2. const grd1 = ctx.createLinearGradient(0, 0, 0, 16); // 渐变方向-Y轴
  3. grd1.addColorStop(0, "#FFFFFF"); //起始颜色
  4. grd1.addColorStop(1, "#CE070A80"); //终点颜色
  5. ctx.fillStyle = grd1; //以上面定义的渐变填充
  6. ctx.fill(); //闭合形状并且以填充方式绘制出来

【拓展】上述代码实现一个渐变色三角形,如果想要绘制多个渐变色三角形,就需要多次进行「1,2」操作。示例代码:

点击查看代码
  1. var bg: any = document.getElementById("triangle");
  2. var ctx = bg.getContext("2d");
  3. ctx.beginPath();
  4. ctx.moveTo(0, 10);
  5. ctx.lineTo(30, 10);
  6. ctx.lineTo(15, 26);
  7. const grd2 = ctx.createLinearGradient(0, 10, 0, 26);
  8. grd2.addColorStop(0, "#FFFFFF"); //起始颜色
  9. grd2.addColorStop(1, "#CE070A80"); //终点颜色
  10. ctx.fillStyle = grd2; //以上面定义的渐变填充
  11. ctx.fill(); //闭合形状并且以填充方式绘制出来
  12. //填充三角形(等边)
  13. ctx.beginPath();
  14. ctx.moveTo(0, 0);
  15. ctx.lineTo(30, 0);
  16. ctx.lineTo(15, 16);
  17. const grd1 = ctx.createLinearGradient(0, 0, 0, 16);
  18. grd1.addColorStop(0, "#FFFFFF"); //起始颜色
  19. grd1.addColorStop(1, "#CE070A80"); //终点颜色
  20. ctx.fillStyle = grd1; //以上面定义的渐变填充
  21. ctx.fill(); //闭合形状并且以填充方式绘制出来
  • css实现

1. 绘制渐变色的矩形

  1. // html
  2. <div className="triangle"></div>
  3. // css
  4. .triangle {
  5. width: 30px;
  6. height: 16px;
  7. background-image: linear-gradient(#FFFFFF, #CE070A80);
  8. }

2. 绘制两个和背景色同色的三角形

  1. // css
  2. .triangle:before {
  3. position: absolute;
  4. content: "";
  5. width: 0;
  6. height: 0;
  7. border-right: 15px solid transparent;
  8. border-bottom: 16px solid #FFFFFF;
  9. }
  10. .triangle:after {
  11. position: absolute;
  12. content: "";
  13. right: 0; // 使绘制的三角形位于矩形右侧
  14. width: 0;
  15. height: 0;
  16. border-left: 15px solid transparent;
  17. border-bottom: 16px solid #FFFFFF;
  18. }

【缺点】这种方式不能实现效果二,对于效果一不允许背景色带有透明度,实现效果有一定的局限性。

总结

对于简单的效果,建议使用方法二,如果要实现较为复杂的效果,可以使用方法一或者直接用图片替代(这种方式最简单直接)

canvas 实现渐变色填充的三角形的更多相关文章

  1. 使用canvas绘制渐变色矩形和使用按键控制人物移动

    使用canvas绘制渐变色矩形和使用按键控制人物移动 1.使用canvas绘制渐变色矩形 效果演示 相关代码: <!DOCTYPE html> <html lang="en ...

  2. canvas快速绘制圆形、三角形、矩形、多边形

    想看前面整理的canvas常用API的同学可以点下面: canvas学习之API整理笔记(一) canvas学习之API整理笔记(二) 本系列文章涉及的所有代码都将上传至:项目代码github地址,喜 ...

  3. canvas放射性渐变填充

    今天在学习canvas时,遇到canvas的fillstyle有一个createRadialGradient()方法,创建放射性渐变. 上代码: <!DOCTYPE html> <h ...

  4. 小程序canvas绘制渐变色(简单入门)

    呀,曾经的我是那么的单纯,天真,粗略的翻了一遍小程序画布API,没有看见渐变色,就以为不支持渐变色 于是在项目中直接把原本的渐变色换成了单一颜色展示,发现很low啊 但是,自从上次小程序API文档更新 ...

  5. html5 canvas用图案填充形状

    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...

  6. html5 canvas 多个填充渐变形状

    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...

  7. HTML5 Canvas渐进填充与透明

    详细解释HTML5 Canvas中渐进填充的参数设置与使用,Canvas中透明度的设置与使 用,结合渐进填充与透明度支持,实现图像的Mask效果. 一:渐进填充(Gradient Fill) Canv ...

  8. Windows游戏编程大师技巧之三角形填充

    一.三角形的种类 三角形一般可以分为如下的四种类型(这四种类型是对于计算机来说的,不是数学意义上的分类): 平顶三角形:就是在计算机中显示的上面两个顶点的Y坐标相同. 平底三角形:就是在计算机中显示的 ...

  9. Web前端学习笔记——Canvas

    <!DOCTYPE html> <html lang="en"> <head>     <meta charset="UTF-8 ...

随机推荐

  1. Synteny和collinear的区别

    在比较基因组学的时候,经常会听到"共线性"这个词,但是与其对应的有两个不同的概念,即 (1) synteny (2) collinear 二者的区别如下图所示: 可以看到,synt ...

  2. python-django-事务使用

    其中任何一个步骤失败都不行, 失败则回滚 在一对一的模型下 例如,用户基本信息和用户详细信息 必须两个一起添加用户信息才算成功 通过位置参数来实现 手动控制事务 def page_trans_hand ...

  3. mvc中常见的属性验证

    客户端验证逻辑会对用户向表单输入的数据给出一个即时反馈.而之所以需要服务器端验证,是因为来自网络的信息都是不能被信任的. 当在ASP.NET MVC设计模式上下文中谈论验证时,主要关注的是验证模型的值 ...

  4. Demo04分解质因数

    package 习题集1;import java.util.Scanner;//将一个正整数分解质因数.例如输入90,打印出90=2*3*3*5public class Demo04 { public ...

  5. 日常Java 2021/9/19

    Math类方法 package m; public class m { public static void main(String args[]) { //计算平方根 System.out.prin ...

  6. A Child's History of England.48

    A few could not resolve to do this, but the greater part complied. They made a blazing heap of all t ...

  7. cephfs文件系统场景

    创建cephfs文件系统: [cephfsd@ceph-admin ceph]$ cd /etc/ceph [cephfsd@ceph-admin ceph]$ ceph fs ls No files ...

  8. 源码分析-Producer

    消息生产者的代码都在client模块中,相对于RocketMQ来讲,消息生产者就是客户端,也是消息的提供者. 方法和属性 主要方法介绍 //创建主题 void createTopic(final St ...

  9. 【JAVA】【Basic】MacOS上搭建JAVA开发环境

    1. JRE 1.1. 下载地址:https://www.oracle.com/technetwork/java/javase/downloads/index.html 1.1.1. dmg格式安装: ...

  10. Vue 标签中的ref属性和refs

    ref: ref 被用来给元素或子组件注册引用信息.引用信息将会注册在父组件的 $refs 对象上.如果在普通的 DOM 元素上使用,引用指向的就是 DOM 元素:如果用在子组件上,引用就指向组件. ...