canvas应用例子-思维导图

效果图如下:

函数说明:

// 求圆上一点坐标,返回坐标点
function circlePoint(x, y, r, a) {
var tmpx = x + r * Math.cos(a * Math.PI / 180);
var tmpy = y + r * Math.sin(a * Math.PI / 180);
return {
x: tmpx,
y: tmpy
}
}
//画正多边形
function polygon(context,x, y, n, r) {
context.beginPath();
context.fillStyle = "rgba(215,216,217,.3)";
context.strokeStyle = "hsl(210,0%,50%)";
context.lineWidth = 1;
for(var i=0;i<n;i++){
var tmpPoint = circlePoint(x, y, r, (360 / n) * i);
if(0===i){
context.moveTo(tmpPoint.x, tmpPoint.y);
} else{
context.lineTo(tmpPoint.x, tmpPoint.y);
} }
context.closePath();
context.stroke();
context.fill();
}
//画圆形
function circle(context,x,y,n,r){
context.beginPath();
context.arc(x, y, r, 0, Math.PI * 2, true);
context.strokeStyle = "hsl(210,0%,50%)";
context.fillStyle = "rgba(215,216,217,.3)";
context.lineWidth = 1;
context.stroke();
context.fill();
}
// x坐标
// y坐标
// rnum 正多变行的边的个数, 至少为3个,否则为圆形
// cnum 同心图形个数
// radnum 圆形放射条数,只有圆形起作用
// R 最大半径
// rot 旋转角度
// arr 交点,交点个数与正多边形边数相同或与圆形放射条数相同
function drawGraph(ctx,x,y,rnum,cnum,radnum,R,rot,arr){
var isCircle = rnum<3?true:false;
var tmpNum = 0;
if(isCircle){
tmpNum = radnum;
} else{
tmpNum = rnum;
}
for(var i =0;i<cnum;i++){
if(isCircle){
circle(ctx,x, y, rnum, R-(R/cnum)*i);
} else{
polygon(ctx,x, y, rnum, R-(R/cnum)*i);
}
} for (var i = 0; i < tmpNum; i++) {
ctx.beginPath();
ctx.strokeStyle = "#99999";
ctx.lineWidth = 1;
ctx.moveTo(x, y);
var tmpPoint = circlePoint(x, y, R, rot + (360 / tmpNum) * i);
ctx.lineTo(tmpPoint.x, tmpPoint.y);
ctx.stroke();
} ctx.beginPath();
ctx.strokeStyle = "#93c54f";
ctx.lineWidth = 2;
var grd = ctx.createRadialGradient(x, y, 0, x, y, R);
grd.addColorStop(0, "rgba(255,255,255,0)");
grd.addColorStop(1, "rgba(128,187,45,0.6)");
ctx.fillStyle = grd;
for (var i = 0; i < tmpNum; i++) {
var tmpPoint = circlePoint(x, y, R * arr[i], rot + (360 / tmpNum) * i);
if (0 === i) {
ctx.moveTo(tmpPoint.x, tmpPoint.y);
} else {
ctx.lineTo(tmpPoint.x, tmpPoint.y);
}
} ctx.closePath();
ctx.stroke();
ctx.fill();
}
//使用方法
drawGraph(ctx,150,200,6,4,0,120,0,[1, 0.25, 0.75, 0.75, 1,0.5]);
drawGraph(ctx,450,200,0,4,5,120,-30,[1, 0.75, 0.75, 0.75, 0.5]);

例子:demo

参考:
https://developer.mozilla.org/zh-CN/docs/Web/Guide/HTML/Canvas_tutorial
http://www.w3schools.com/html/html5_canvas.asp

canvas应用-思维导图的更多相关文章

  1. 前端Canvas思维导图笔记

    看不清的朋友右键保存或者新窗口打开哦!喜欢我可以关注我,还有更多前端思维导图笔记

  2. vue源码逐行注释分析+40多m的vue源码程序流程图思维导图 (diff部分待后续更新)

    vue源码业余时间差不多看了一年,以前在网上找帖子,发现很多帖子很零散,都是一部分一部分说,断章的很多,所以自己下定决定一行行看,经过自己坚持与努力,现在基本看完了,差ddf那部分,因为考虑到自己要换 ...

  3. jsMind思维导图模式展示数据

    效果图: jsmind组件下载地址:https://files.cnblogs.com/files/fengyeqingxiang/jsmind.zip 后端代码,此处以C#编写的后台,Java或其他 ...

  4. 15分钟带你了解前端工程师必知的javascript设计模式(附详细思维导图和源码)

    15分钟带你了解前端工程师必知的javascript设计模式(附详细思维导图和源码) 前言 设计模式是一个程序员进阶高级的必备技巧,也是评判一个工程师工作经验和能力的试金石.设计模式是程序员多年工作经 ...

  5. Web思维导图实现的技术点分析(附完整源码)

    简介 思维导图是一种常见的表达发散性思维的有效工具,市面上有非常多的工具可以用来画思维导图,有免费的也有收费的,此外也有一些可以用来帮助快速实现的JavaScript类库,如:jsMind.KityM ...

  6. Photoshop、Illustrator思维导图笔记

    半年前学习Photoshop时记得的思维导图笔记,可能不是很全,常用的基本都记下了.

  7. "Becoming Functional" 阅读笔记+思维导图

    <Becoming Functional>是O'Reilly公司今年(2014)7月发布的一本薄薄的小册子,151页,介绍了函数式编程的基本概念.全书使用代码范例都是基于JVM的编程语言, ...

  8. IT技术思维导图

    在网上看到有个人总结的java技术的东东,觉得很好,就保存下来了,码农还真是累啊,只有不断的学习才能有所提高,才能拿更多的RMB啊. java技术思维导图 服务端思维导图 前端思维导图

  9. XMind共享未保存的思维导图的教程

    我们在XMind 6对导图进行局域网共享时,一般都是对XMind文件先进行保存再共享,那样是忘记保存呢,该如何共享.局域网共享功能是XMind 6特有的功能之一,自是较为完善,性能强大的功能,当然有办 ...

随机推荐

  1. struts框架学习过程中的问题

    1,错误: java.lang.NullPointerException: Module 'null' not found.错误原因,struts运行需要的.jar文件拷贝不足,应该把它们加入到cla ...

  2. Eclipse程序员要掌握的常用快捷键

    Ctrl+K 光标放在一个变量上(注意,是变量,如果你的光标放在了字符串上,如http://keleyi.com则没有任何作用的),按下Ctrl+K光标会定位到下一个相同的变量 Shift+Ctrl+ ...

  3. hdu - 3959 Board Game Dice(数学)

    这道题比赛中没做出来,赛后搞了好久才出来的,严重暴露的我薄弱的数学功底, 这道题要推公式的,,,有类似于1*a+2*a^2+3*a^3+...+n*a^n的数列求和. 最后画了一张纸才把最后的结果推出 ...

  4. GNU libc (Glibc) 2.18 发布

    标准C库Glibc发布2.18正式版.2013-08-12 上一个版本是2012-12-25的2.17. 详细改进:Version 2.18 * The following bugs are reso ...

  5. 入门级:怎么使用C#进行套接字编程(一)

    翻译一篇简单的文章学习下基础,此文针对我等对socket只听说未尝试阶段的水平. How to C# Socket programming C#通过他的命名空间像System.Net和System.N ...

  6. ASP.NET Web API 跨域访问

    自定义特性 要在WebApi中实现JSONP,一种方式是实现自定义特性  http://stackoverflow.com/questions/9421312/jsonp-with-asp-net-w ...

  7. Nikola的5项依赖注入法则

    本篇文章来自对 Nikola Malovic 博客文章 <Inversion Of Control, Single Responsibility Principle and Nikola’s l ...

  8. MySql和SQL Server数据类型 对比

    My Sql 数据类型 SQL Server 数据类型 Yes/No bit Smallint(字节型) tinyint Integer(长整型) int Real(单精度浮点型)    real F ...

  9. Nginx运行Mono Web (ASP.NET)

    Mono Web除了可以使用Apache/mod_mono方式承载运行外,还可以使用Nginx/FastCGI方式运行. Nginx配置asp.net更简单方便,用处也多,可以通过FastCGI运行a ...

  10. [stm32][ucos] 1、基于ucos操作系统的LED闪烁、串口通信简单例程

    * 内容简述: 本例程操作系统采用ucos2.86a版本, 建立了5个任务            任务名                                             优先级 ...