前端绘制立体效果的三角形的demo
在移动端使用时,需要自适应屏幕。canvas上无法设置rem,所以在canvas外加一个父级元素设置为rem,再将canvas的宽高设置为100% 100%。
如果想出现立体效果,应该将一个三角形分为三个三角形来进行绘制。
突出立体的效果,应该设置过渡色。
 
 
toTriangle(a,b,c){
//a为左边三角的长度,b为顶点距离中心的长度,c为右边顶点距离中心的长度
var bg = document.getElementById('circle_triangle');
var ctx = bg.getContext('2d');
 
//自适应cavas画布的宽高,动态设置。
let canvas_outer = document.getElementById('outer');
console.log(canvas_outer.offsetHeight);
bg.height = canvas_outer.offsetHeight;
bg.width = canvas_outer.offsetWidth;
 
let bod = bg.getBoundingClientRect()
let wid = bod.width;
//三角形三个顶点从顶点:a_dot,左边点:b_dot,右边点:c_dot。和参数a,b,c有区别
let a_dot = [wid/2,(wid/2)*(1-b)]
let b_dot = [(wid/2)*(1-a*Math.cos((Math.PI)*45/180)),(wid/2)*(a*Math.sin((Math.PI)*45/180)+1)]
let c_dot = [(wid/2)*(1+c*Math.cos((Math.PI)*45/180)),(wid/2)*(c*Math.sin((Math.PI)*45/180)+1)]
 
//绘制三角形1(左边)
ctx.beginPath();
ctx.moveTo(wid/2,wid/2); //从A开始
ctx.lineTo(b_dot[0],b_dot[1])//
ctx.lineTo(a_dot[0],a_dot[1])
var grd1 = ctx.createLinearGradient(b_dot[0],b_dot[1],a_dot[0],a_dot[1],);//使用渐变颜色填充,从 点b到a
grd1.addColorStop(0,"#"); //起始颜色
grd1.addColorStop(0.25,"#"); //起始颜色
grd1.addColorStop(0.5,"#"); //起始颜色
grd1.addColorStop(0.75,"#"); //终点颜色
grd1.addColorStop(1,"#"); //终点颜色
ctx.fillStyle=grd1; //以上面定义的渐变填充
ctx.fill(); //闭合形状并且以填充方式绘制出来
ctx.closePath()
 
//绘制三角形2(右边)
ctx.beginPath();
ctx.moveTo(wid/2,wid/2); //从A开始
ctx.lineTo(a_dot[0],a_dot[1])
ctx.lineTo(c_dot[0],c_dot[1])
var grd2 = ctx.createLinearGradient(a_dot[0],a_dot[1],c_dot[0],c_dot[1]);//使用渐变颜色填充,从(0,0)到(200,0) (左到右)
grd2.addColorStop(0,"#"); //起始颜色
grd2.addColorStop(0.25,"#"); //起始颜色
grd2.addColorStop(0.5,"#"); //起始颜色
grd2.addColorStop(0.75,"#"); //终点颜色
grd2.addColorStop(1,"#"); //终点颜色
ctx.fillStyle=grd2; //以上面定义的渐变填充
ctx.fill(); //闭合形状并且以填充方式绘制出来
ctx.closePath()
 
//绘制三角形3(底部)
ctx.beginPath();
ctx.moveTo(wid/2,wid/2); //从A开始
ctx.lineTo(b_dot[0],b_dot[1])//
ctx.lineTo(c_dot[0],c_dot[1]);
var grd3 = ctx.createLinearGradient(b_dot[0],b_dot[1],c_dot[0],c_dot[1]);//使用渐变颜色填充,从(0,0)到(200,0) (左到右)
grd3.addColorStop(0,"#"); //起始颜色
grd3.addColorStop(0.25,"#"); //起始颜色
grd3.addColorStop(0.5,"#"); //起始颜色
grd3.addColorStop(0.75,"#"); //终点颜色
grd3.addColorStop(1,"#"); //终点颜色
ctx.fillStyle=grd3; //以上面定义的渐变填充
ctx.fill(); //闭合形状并且以填充方式绘制出来
ctx.closePath()
}
 
 
 

前端使用canvas绘制立体三角形的更多相关文章

  1. canvas一周一练 -- canvas绘制立体文字(2)

    运行效果: <!DOCTYPE html> <html> <head> </head> <body> <canvas id=" ...

  2. 小练手:用HTML5 Canvas绘制谢尔宾斯基三角形

    文章首发于我的知乎专栏,原地址:https://zhuanlan.zhihu.com/p/26606208 以前看到过一个问题:谢尔宾斯基三角形能用编程写出来么?该怎么写? - 知乎,在回答里,各方大 ...

  3. 学习笔记:HTML5 Canvas绘制简单图形

    HTML5 Canvas绘制简单图形 1.添加Canvas标签,添加id供js操作. <canvas id="mycanvas" height="700" ...

  4. Canvas绘制图形

    1.Canvas绘制一个蓝色的矩形 <!DOCTYPE html> <html> <head lang="en"> <meta chars ...

  5. 使用 HTML5 Canvas 绘制出惊艳的水滴效果

    HTML5 在不久前正式成为推荐标准,标志着全新的 Web 时代已经来临.在众多 HTML5 特性中,Canvas 元素用于在网页上绘制图形,该元素标签强大之处在于可以直接在 HTML 上进行图形操作 ...

  6. 使用Canvas绘制图形的基本教程

    原文地址:http://www.cnblogs.com/picaso/archive/2012/11/26/2789077.html HTML5火的正热,最近有个想法也是要用到HTML的相关功能,所以 ...

  7. HTML5之Canvas绘图——使用Canvas绘制图形的基本教程

    原文转自:http://www.cnblogs.com/picaso/archive/2012/11/26/2789077.html HTML5火的正热,最近有个想法也是要用到HTML的相关功能,所以 ...

  8. canvas 绘制双线技巧

    楔子 最近一个项目,需要绘制双线的效果,双线效果表示的是轨道(类似铁轨之类的),如下图所示: 负责这块功能开发的小伙,姑且称之为L吧,最开始是通过数学计算的方式来实现这种双线,也就是在原来的路径的基础 ...

  9. 用canvas绘制验证码

    在通常的登录界面我们都可以看到验证码,验证码的作用是检测是不是人在操作,防止机器等非人操作,防止数据库被轻而易举的攻破. 验证码一般用PHP和java等后端语言编写: 但是在前端,用canva或者SV ...

随机推荐

  1. iOS 开发之 -- UDID和UUID的详解

    老实说,搞了几年的ios开发了,对基础的概念,还是不牢固,整天都是为了赶进度而码代码,这里记录一下这两者的区别: UDID的全名为 Unique Device Identifier :设备唯一标识符. ...

  2. Android无线测试之—UiAutomator UiScrollable API介绍四

    获取与设置最大滚动次数常量值 一.获取与设置最大滚动次数常量值相关API 返回值 API 描述 int getMaxSearchSwipes() 获取执行搜索滑动过程中的最大滑动次数,默认最大滚动次数 ...

  3. Perfmon - Windows 自带系统监测工具

    本文转载自oscar999 一. 简述 可以用于监视CPU使用率.内存使用率.硬盘读写速度.网络速度等. Perfmon提供了图表化的系统性能实时监视器.性能日志和警报管理,系统的性能日志可定义为二进 ...

  4. 递归删除资源树 Ztree

    前言 最近项目里有这么一个需求:现在有一个用Ztree编写的资源树,当删除资源树的某个节点时,则将此节点下面的所有节点全部删除,这里显然就用到了递归:若此节点被删除后无其它的兄弟节点了,我们还需要将其 ...

  5. 【集中工作薄】 当前文件夹中所有Excel文件中 多个工作簿的第一个工作表 复制到工作簿中

    功能:当前文件夹中所有Excel文件中 多个工作簿的第一个工作表 复制到工作簿中 Sub Books2Sheets() '定义对话框变量 Dim fd As FileDialog Set fd = A ...

  6. 【BZOJ5073】[Lydsy十月月赛]小A的咒语 DP(错解)

    [BZOJ5073][Lydsy十月月赛]小A的咒语 题解:沙茶DP,完全不用后缀数组. 用f[i][j]表示用了A的前i个字符,用了j段,最远能匹配到哪.因为显然我们能匹配到的地方越远越好,所以我们 ...

  7. ios 更改UITableview中Section的字体颜色

    -(UIView *)tableView:(UITableView *)tableView viewForHeaderInSection:(NSInteger)section { UILabel *c ...

  8. mysql用sql创建表完整实例

    create table user_login_latest( id int(11) unsigned NOT NULL AUTO_INCREMENT, user_id int(11) not nul ...

  9. 元素隐藏 css

    参考:http://www.zhangxinxu.com/wordpress/2011/03/css-%E7%9B%B8%E5%AF%B9%E7%BB%9D%E5%AF%B9relativeabsol ...

  10. MapRecude

    任务:分析通话记录,查处每个手机号码有哪些打过来的号码 13510921776 10086 13710148751 10086 13914248991 10086 13510921776 137101 ...