首页 / CANVAS / canvas手撸柱状图
canvas手撸柱状图
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了canvas手撸柱状图,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含2282字,纯文字阅读大概需要4分钟。
内容图文
![canvas手撸柱状图](/upload/InfoBanner/zyjiaocheng/1018/93a7e7e7fe344f8e9f6c4e7ff6624ea3.jpg)
var canvas = document.getElementById(“canvas”);
var ctx = canvas.getContext(“2d”);
var width = canvas.width;
var height = canvas.height;
var current = 0;
var padding = 50;
var data = [123,123,343,541,400];
var rate;
var Xlength;
customChart()
function customChart(){
var interval = data.length;
var Maxnumber = Math.max(...data);
let rateH = height - padding*2;
var NUMmax = Maxnumber.toString().length;
let percent = '1';
for(let i = 1;i<NUMmax;i++){
percent += '0';
}
let yxai = Math.ceil(Maxnumber/percent)*percent;
if(Maxnumber>rateH){
rate = yxai/rateH;
}else{
rate = 1;
}
coordinate(yxai,interval,percent);
}
function coordinate(yxai,interval,percent){
//画坐标轴X
ctx.moveTo(padding + 0.5,padding + 0.5);
ctx.lineTo(padding + 0.5,height - padding + 0.5);
ctx.stroke();
//画坐标轴Y
ctx.moveTo(padding + 0.5,height - padding + 0.5);
ctx.lineTo(width - padding + 0.5,height - padding + 0.5);
ctx.stroke();
ctx.textAlign = 'center';
//坐标间隔长度
Xlength = (width - padding * 2)/interval;
var Ylength = (height - padding * 2)/(yxai/percent);
//坐标突起X轴
for(let i = 1;i <= interval;i++){
ctx.moveTo(padding + Xlengthi+0.5,height - padding + 0.5);
ctx.lineTo(padding + Xlengthi+0.5,height - padding + 0.5 + 5);
ctx.fillText(data[i-1],padding+Xlengthi-Xlength/2+0.5,height - padding + 0.5+15);
ctx.stroke();
}
//坐标突起Y轴
for(let i = 1;i <= yxai/percent;i++){
ctx.moveTo(padding+0.5,height - padding-Ylengthi+0.5);
ctx.lineTo(padding - 5+0.5,height - padding-Ylengthi+0.5);
ctx.fillText(percenti,padding-20+0.5,height - padding-Ylength*i+0.5+3);
ctx.stroke();
}
looping();
}
function looping() {
console.log();
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] * current / 100) / rate);
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;*/
}
}
内容总结
以上是互联网集市为您收集整理的canvas手撸柱状图全部内容,希望文章能够帮你解决canvas手撸柱状图所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。