经验首页 前端设计 程序设计 Java相关 移动开发 数据库/运维 软件/图像 大数据/云计算 其他经验
当前位置:技术经验 » HTML/CSS » CSS » 查看文章
canvas 实现渐变色填充的三角形
来源:cnblogs  作者:shellon  时间:2021/12/31 8:44:18  对本文有异议

实现效果

效果一:

效果二:

实现思路

  • 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. }

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

总结

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

原文链接:http://www.cnblogs.com/shellon/p/15728249.html

 友情链接:直通硅谷  点职佳  北美留学生论坛

本站QQ群:前端 618073944 | Java 606181507 | Python 626812652 | C/C++ 612253063 | 微信 634508462 | 苹果 692586424 | C#/.net 182808419 | PHP 305140648 | 运维 608723728

W3xue 的所有内容仅供测试,对任何法律问题及风险不承担任何责任。通过使用本站内容随之而来的风险与本站无关。
关于我们  |  意见建议  |  捐助我们  |  报错有奖  |  广告合作、友情链接(目前9元/月)请联系QQ:27243702 沸活量
皖ICP备17017327号-2 皖公网安备34020702000426号