必发365乐趣网投手机版HTML5 进阶种类:canvas 动态图表

by admin on 2019年2月13日

01

收受了和睦,我们就变得平心静气,爱上了和谐,大家就爱上了众人。

在今日头条上认识一位文友,观者极多,文章见诸各大法学平台。

早就有一段时间,每天非看不可她的小说,并为其文字深深迷恋。令人竟然的是,固然她的篇章好评如云,却总有那么一小撮人在留言区里放炮谩骂,恶语伤人。可她吗,始终不做其余回复、也不做其它回手,一副无所顾虑的典范。

有五回作者惊叹地问她:“你每天那么劳顿地码字,还那么积极地推广,可对于那多少个负面评论,你都不做任何回应,是因为从没观看吗?”

他斩钉切铁地说:“小编当然看到了。”

本身跟着问:“既然看到了,难道你或多或少都不变色呢?”

“哪有何是两全的,人都尚且做不到宏观,更何况一篇文章了。”她接着说“我不需要每种人都爱好作者的篇章,笔者的篇章只写给那一个帮衬本身、鼓励作者、爱小编的人。”

有一句流行语叫——有谈得来的路,让外人说去呢。

只要曾经的本人蒙受这么的诬陷,肯定会气不打一处来,撕破脸皮反驳对方,回怼对方,直到对方哑口无言,并且发自内心地道歉。

但其实,那样的做法根本走不通,只会毁掉自家的映像,还会让对方进一步地得意跋扈。因为,一个素质品行低下的人,那就是俗称的“烂人”,最大的春风得意,就是激怒旁人,打一场不须求负任何权利的口水战。

文友的回应让本身领悟:原来,再美好的东西,也不可以让所有人都乐意,最重大的,就是搞好大家友好。

尽管是评分再高的电影,也肯定会有毁谤和差评,就到底关切度再高的超新星,也一定会有冷箭和讽刺。不得不说,笑看生活不到家的人,是一个高情商的人。

概念画布

<canvas id="canvas" width="600" height="500"></canvas>

canvas 标签只是个容器,真正兑现画图的大概 JavaScript。

02

还记得某女星在一回访谈中被记者问到”当外人骂你时,你会做何表态”时,女星的回答意料之外:”你骂本人,小编不怪你。因为小编不大概担保各个人都喜欢本人,再者说,你的谈话跟自个儿又有哪些关系?”

有一句格言是那样说的:“喜欢月亮的驾驭,就要接受它有洋红和不周密的时候;喜欢水果的美满,也要容许它通过苦涩成长的进度。”

任何事物都有它缺憾的一头,而完善的心理就在于容纳那些不周详,而生而为人,大家便应该允许和收受本身的不周到。

有一位艺术家,想画出一幅人人都爱不释手的画。经过多少个月的劳动,他把画好的作品拿到市场上,并在画的一侧放了一支笔,附上一则说明:亲爱朋友,如若你觉得那幅画什么地方有不佳之笔,请赐教,并在画中作上标记。傍晚,美学家取回画时,惊讶地意识所有画面都涂满了标记,没有一笔一划不被责怪的。音乐家心中分外不快,对本次尝深感失望。

画师决定换一种方法再去试试,于是她又画了一张同样的画得到市场上展出。和上次不等的是,本次她须要每位看客将其最为欣赏的地点都标上记号。出人意表的是,原来曾被指责的笔画,近日都变成了赞叹的符号。

最后,书法家不无感慨地说:“小编明日到底领会了,无论本人做怎么样,只要一部分人满意就足足了。因为,在有点人看来是丑的东西,在另一对人的眼里则恰恰美好的”。

必发365乐趣网投手机版 1

实际,人生就好比茶叶蛋一般,不要因为有了裂痕而颓靡,正是因为有了那一个各种“缺憾”、各个“不完美”才能使人生愈发可口。

而裂痕,也不自然是丑陋的,换一个角度,它就成了一种装点人生的饰品。

总结

为了更有益于的运用,封装成构造函数。通过

var chart = new sBarChart('canvas',data,{
    title: 'xxx公司年度盈利',   // 标题
    titleColor: '#000000',      // 标题颜色
    titlePosition: 'top',       // 标题位置
    bgColor: '#ffffff',         // 背景色
    fillColor: '#1E9FFF',       // 柱状填充色
    axisColor: '#666666',       // 坐标轴颜色
    contentColor: '#a5f0f6'     // 内容横线颜色
});

参数可布置,很简短就生成一个本性化的柱状图。代码地址:canvas-demo

说到底加上折线图、饼图、环形图,完整封装成sChart.js插件,插件地址:sChart.js

05

曾经有一位女孩子问小编如此一个难点:“如若见到了和睦最丑陋的另一方面,是或不是就足以全心全意人生了?”

那句提问让本人探讨良久。

潜心人生,那几个题材有点大。

怎么才是聚精会神人生呢?小编的驾驭是,接受自个儿,不会为了投其所好外人而殉职自个儿就是全身心人生。

一个人,愿意承受不圆满的和睦,是一种何等宝贵的小聪明与多量啊。

不论是认知了和睦多么“丑陋”或许多么“绚丽”,只要全体还有目的在于、有追求,看到本人逐步变为团结喜爱的面容,任其自然地,就承受了友好,并爱上了投机。


援救原创,转发请私信。小编是【成长励志】专题副主编慕新阳,喜欢小编的文字就送个“喜欢”给我吧!

分析

可以这一个图形由 xy轴、数据条形和标题组成。

  • 轴线:可以利用 moveTo() & lineTo() 完毕
  • 文字:能够行使 fillText() 完结
  • 正方形:可以拔取 fillRect() 落成

这般看来,似乎并从未多难。

必发365乐趣网投手机版 2

标题

要放置标题,就会发现咱们一大早概念的 padding
内边距确实有用,总无法把标题给覆盖到柱状图上呢。不过标题有的是在顶部,有的在底部,那么就不可以写死了。定一个变量
position 来判断地方去画出来。这一个不难。

// 标题
if(title){                      // 也不一定有标题
    ctx.textAlign = 'center';
    ctx.fillStyle = '#000000';  // 颜色,也可以不用写死,个性化嘛
    ctx.font = '16px Microsoft YaHei'
    if(titlePosition === 'bottom' && padding >= 40){
        ctx.fillText(title,width/2,height-5)
    }else{
        ctx.fillText(title,width/2,padding/2)
    }
}

03

新东方教育公司首席营业官新东方董事长俞敏洪说过:“上帝成立人类的的时候就把我们的炮制成不到家的人,大家平生竭力的进度就是使和谐变得进一步周全的进度,大家的全部美德都源于于击败自身缺点的拼搏。”

有的是时候,大家对团结的人生抱有很高的指望,试图得心应手,让所有人对大家正确。

可大家却不知情,将本来的不周详通过努力往理想的正规化逐步趋近,也是一种完美。

浮躁和虚荣,是升高路上的泥泞和陷阱。有些人,不顾一切地把自个儿伪装起来,只为了拿走别人的钟情和追崇。可唯有她们协调精通,在光鲜亮丽的骨子里,活得确实疲惫。

实现

04

新近,有个女人发来私信,讲述了他的沉郁。她说,只要自个儿发一条动态,就会像性心理障碍似地翻看人家的评介,甚至对评价的还原也特别地小心。

结果是,她一遍次地发了又删,甚至对各自周旋的评头品足寝食难安。

恰恰那天,作者来看了一则新闻,说的香港地质学院的心绪学专家罗布in 
邓巴和他的团对发生了了一份关于社交互连网的钻研告诉。报告显示:不论你在互连网社交上有多少情侣,真正和友好相互交换的唯有4个人左右。

必发365乐趣网投手机版 3

在那么些编造的人际关系网里,大部分人然而是点赞之交。

如这些女孩子一样,大家都期待被所有人喜欢,成为人际关系中”得心应手”的那多少个留存。

于是乎,忍气吞声便无形中提上了日程。甚至,外人有口无心说出的一句话,都要不惜一切地已毕对方的期许。

你以一身的姿态合群合圈,报了并不感兴趣的兴趣班,学着字字排斥的古文天书,哪怕只是为着可以在豪门一起出去玩的时候,有一个一并的话题。

《萧十一郎》中说,人生不过百年,爱别离、求不得均是光阴似箭,待得白发苍苍,回首过往,是不是得到已不紧要。生命在岁月里流淌,溅起的水花就是耀眼的日光,无论喜悲,最后依旧要落回命局的历程。世事悲凉,人生哪有完美,完美的只是经过。

种种人有各类人的审美标准和喜欢倾向,想一想,假如一个人可以让所有人都,那得随便成什么?所以,大家无需讨好所有人,只是需求讨好大家协调而已。

柱状动画

接下去要把数量通过柱状的高低突显出来,那里有个卡通效果,柱状会从0升到对应的值。在
canvas 上完成动画我们能够利用 setInterval、setTimeout 和
requestAnimationFrame。

requestAnimationFrame
不须求自个儿安装定时时间,而是随着浏览器的绘图走。那样就不会掉帧,自然就通畅。
requestAnimationFrame
原本只援助IE10上述,然而可以通过匹配的写法完结包容到IE6都行。

function looping() {
    looped = requestAnimationFrame(looping);
    if(current < 100){      
    // current 用来计算当前柱状的高度占最终高度的百分之几,通过不断循环实现柱状上升的动画
        current = (current + 3) > 100 ? 100 : (current + 3);
        drawAnimation();
    }else{
        window.cancelAnimationFrame(looped);
        looped = null;
    }
}
function drawAnimation() {
    for(var i = 0; i < data.length; i++) {
        var x = Math.ceil(data[i].value * current / 100 * yRatio);
        var y = height - padding - x;
        ctx.fillRect(padding + xLength * (i + 0.25), y, xLength/2, x);
        // 保存每个柱状的信息
        data[i].left = padding + xLength / 4 + xLength * i;
        data[i].top = y;
        data[i].right = padding + 3 * xLength / 4 + xLength * i;
        data[i].bottom = height - padding;
    }
}
looping();
  • 柱状即是画矩形,由 ctx.fillRect(x, y, width, height) 达成,x y
    为矩形左上角的坐标,width height 为矩形的宽高,单位为像素
  • ctx.fillStyle=’#1E9FFF’ 安装填充颜色

到那边,一个最焦点的柱状图就完事了。接下来,我们可以为他添加标题。

画坐标点

y轴上多少坐标点由友好来定义,需求获得到多少的最大值来测算y轴上的坐标值。x轴的点则由传入的数量长度控制,坐标值由传入数据的
xAxis 属性决定。

  • 坐标值就是文字,由 ctx.fillText(value, x, y) 填充文字,value
    为文字值,x y 为值的坐标
  • ctx.textAlign=’center’ 设置文字居中对齐
  • ctx.fillStyle=’#000000′ 设置文字填充颜色

    var yNumber = 5; // y轴的段数
    var yLength = Math.floor((height – padding 2) / yNumber); // y轴每段的真实长度
    var xLength = Math.floor((width – padding
    2) / data.length); // x轴每段的实际长度

    ctx.beginPath();
    ctx.textAlign = ‘center’;
    ctx.fillStyle = ‘#000000’;
    ctx.strokeStyle = ‘#000000’;
    // x轴刻度和值
    for (var i = 0; i < data.length; i++) {

    var xAxis = data[i].xAxis;
    var xlen = xLength * (i + 1);
    ctx.moveTo(padding + xlen, height - padding);
    ctx.lineTo(padding + xlen, height - padding + 5);
    ctx.stroke();                                       // 画轴线上的刻度
    ctx.fillText(xAxis, padding + xlen - xLength / 2, height - padding + 15);   // 填充文字
    

    }
    // y轴刻度和值
    for (var i = 0; i < yNumber; i++) {

    var y = yFictitious * (i + 1);
    var ylen = yLength * (i + 1);
    ctx.moveTo(padding, height - padding - ylen);
    ctx.lineTo(padding - 5, height - padding - ylen);
    ctx.stroke();
    ctx.fillText(y, padding - 10, height - padding - ylen + 5);
    

    }

效果

动画效果图片展示不出去,可以到最上面找demo地址

必发365乐趣网投手机版 4

画坐标轴

坐标轴就是两条横线,也等于canvas里最基础的文化。

  • 由 ctx.beginPath() 初始一条新的路线
  • ctx.lineWidth=1 设置线条宽度
  • ctx.strokeStyle=’#000000′ 设置线条颜色
  • ctx.moveTo(x,y) 定义线条的源点
  • ctx.lineTo(x1,y1) 定义线条的终极
  • 最后 ctx.stroke() 把起源和极端连成一条线

    var canvas = document.getElementById(‘canvas’);
    var ctx = canvas.getContext(‘2d’);
    var width = canvas.width;
    var height = canvas.height;
    var padding = 50; // 坐标轴到canvas边框的边距,留边距写文字

    ctx.beginPath();
    ctx.lineWidth = 1;
    // y轴线
    ctx.moveTo(padding + 0.5, height – padding + 0.5);
    ctx.lineTo(padding + 0.5, padding + 0.5);
    ctx.stroke();
    // x轴线
    ctx.moveTo(padding + 0.5, height – padding + 0.5);
    ctx.lineTo(width – padding + 0.5, height – padding + 0.5);
    ctx.stroke();

监听鼠标移动事件

咱俩看到,有些图表,把鼠标移上去,当前的柱状就变色了,移开之后又变回原来的水彩。那里就须求监听
mouseover 事件,当鼠标的岗位位于柱状的面积内,触发事件。

那本人怎么知道在柱状里啊,发今后 drawAnimation()
里会有逐个柱状的坐标,那自个儿干脆把坐标给保存到 data
里。那么鼠标在柱状里的尺码应该是:

  • ev.offsetX > data[i]必发365乐趣网投手机版,.left
  • ev.offsetX < data[i].right
  • ev.offsetY > data[i].top
  • ev.offsetY < data[i].bottom

    canvas.addEventListener(‘mousemove’,function(ev){

    var ev = ev||window.event;
    for (var i=0;i<data.length;i++){
    for (var i=0;i<data.length;i++){
        if(ev.offsetX > data[i].left &&
        ev.offsetX < data[i].right &&
        ev.offsetY > data[i].top &&
        ev.offsetY < data[i].bottom){
            console.log('我在第'+i+'个柱状里。');
        }
    }
    

    })

越来越多小说:lin-xin/blog

前言

canvas 强大的功用让它变成了 HTML5
中卓绝关键的片段,至于它是什么,那里就不要求自家多作介绍了。而可视化图表,则是
canvas 强大作用的表现之一。

当今曾经有了诸多成熟的图纸插件都以用 canvas
达成的,Chart.js、ECharts等得以打造出美观炫酷的图样,而且大约遮住了有着图表的贯彻。

偶然自个儿只想画个柱状图,本身写又觉得费事,用旁人插件又深感累赘,最终打开百度,拷段代码,粘贴上去修修改改。还不如自个儿撸一个啊。

原稿作者:林鑫,作者博客:https://github.com/lin-xin/blog

发表评论

电子邮件地址不会被公开。 必填项已用*标注

网站地图xml地图